应用场景

当你下载别人的源码的时候,而别人的源码跟你自己电脑里面的编码不一致的情况下将会出现乱码,但是如果要一个个转换编码的话那么那样所需要花的时间太多,所以就有必要写一个软件递归遍历项目下面所有的文件,从而实现自动转换编码,因为项目下面又有文件夹,所有需要使用递归实现。


实现原理如下

第一步:先用这个文件原先的编码读取文件内容存到局部变量当中,然后调用QFile::remove()方法删除文件 
第二步:创建一个跟原先文件名同名的文件,然后设置你要转换的编码,(使用QTextSream::setCodec()方法),将文件内容写入这个新创建的文件当中 
以上两步就可以实现给文件转码。

代码如下

   void Widget::switchCode(QString filePath)
{
QFile file(filePath);
if( !file.open(QIODevice::ReadOnly | QIODevice::Truncate))
{
return;
}
QTextStream in(&file);
in.setCodec(oldCode.toUtf8().data());
QString content = in.readAll();
//qDebug() << "content:" << content;
file.resize(0);
file.remove();
file.close();
QFile outFile(filePath);
if( !outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
return;
}
QTextStream out(&outFile);
out.setCodec(newCode.toUtf8().data());
out << content;
outFile.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

上面的代码很简单,就是我跟我上面说的一样 
其中需要介绍的就是oldCode和newCode,这两个代表 
要转换的文件的原先编码和要转换的编码,变量是定义在类里面的 
属成员变量 
下面介绍如果递归实现整个项目的转化

项目递归转换

void Widget::recursion(QString filePath)
{
QDir dir(filePath);
//文件列表
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
for(int i = 0; i < file_list.size(); i++)
{
QString path = file_list.at(i).absoluteFilePath();
//转换编码
switchCode(path);
}
//文件夹列表
QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i = 0; i < folder_list.size(); i++)
{
QString path = folder_list.at(i).absoluteFilePath();
//递归遍历文件
recursion(path);
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

QFileInfo这个类表示文件信息,如果需要知道打开的文件是文件夹还是文件,就需要借助这个类,QFileInfoList这个类是QFileInfo类的集合,就是’QList < QFileInfo > ‘的typedef定义,剩余的比较简单,大体的思路是先获取文件夹下面的所有文件,然后使用循环给这个文件转码,然后获取文件夹下面的所有文件夹,然后顺还进行递归调用。

软件界面展示

最后附上源码:点我下载 
打包好了的软件:点我下载

版权声明:本文为博主原创文章,转载请保留原文链接 https://blog.csdn.net/SuperVictim/article/details/52725081

qt开发的小软件,可以递归转换文件编码(qt为了防止内存泄露所做的保护机制)的更多相关文章

  1. InputStreamReader介绍&代码实现和转换文件编码_练习

    InputStreamReader介绍&代码实现 package com.yang.Test.ReverseStream; import java.io.FileInputStream; im ...

  2. linux iconv 转换文件编码

    查看文件编码file -i filename 递归转换(包括子文件夹)find default -type d -exec mkdir -p utf/{} \;find default -type f ...

  3. 使用windows命令和iconv.exe批量转换文件编码

    iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt ...

  4. Linux平台上转换文件编码

    Linux系统的iconv指令是一个很好的文件编码转换工具,支持的编码范围广,使用方便,例如将一个utf-8编码的文件(名为tic)转换为gbk编码: iconv -f utf-8 -t gbk ti ...

  5. Linux下批量转换文件编码

    find -iname "*.java" -exec enca {} + |grep -v ASCI |grep -v -i utf |awk -F':' '{print $1}' ...

  6. mac 查看文件编码及转换文件编码

    方法是用vim , vim 打开相应文件, :set fileencoding即可显示文件编码格式 将文件编码转换为utf-8 :set fileencoding=utf-8

  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_6_练习_转换文件编码

  8. Java---设计模式app小软件汇总应用

    写了一个app小软件,重点不在于软件,软件bug挺多,也没去修改. 这个小软件只是为了更好的说明和了解设计模块而做的. Java 程序设计–包结构 Java程序设计的系统体系结构很大一部分都体现在包结 ...

  9. QT开发环境搭建

    一.Qt发展史 1991年,由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架: 2008年,Nokia从Trolltech公司收购Qt, 并增加LGPL的授权模式: 2011年,Digia从N ...

随机推荐

  1. 手动安装配置Android Studio

    官网下载Android Studio安装包后安装启动Android Studio,程序提示安装SDK,因为代理/FQ的原因,安装component失败,错误如下: Preparing "In ...

  2. Power management in semiconductor memory system

    A method for operating a memory module device. The method can include transferring a chip select, co ...

  3. spring应用实例

    新建一个登陆页面:loginActionSupport.jsp,代码例如以下   <%@page contentType="text/html;charset=GBK" is ...

  4. Ueditor 在.net core 中的使用

    参考模仿了 https://blog.csdn.net/qq_34220236/article/details/80581811 这篇文章 要注意的是,去ueditor官网下的包,大多不可用. 要自己 ...

  5. WPF 曲线图表控件(自制)(一)

    原文:WPF 曲线图表控件(自制)(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775092 ...

  6. 简明Python3教程 8.控制流

    简介 迄今为止我们见到的所有程序总是含有一连串语句并且python忠实的顺序执行它们. 那么如何改变它们的执行顺序呢?例如你希望程序根据不同情况作出不同反应,按照当前时间分别 打印出’Good Mor ...

  7. Expression.Blend.4 Chapter 图片和视频的使用

    原文:Expression.Blend.4 Chapter 图片和视频的使用 翻译的地方可能有错误,欢迎大家指正.但是里面每一个程序都是亲自测试过,并加了点自己的看法. 我翻译的是Expression ...

  8. GameBuilder见缝插针游戏开发系列(AA)

    今天推出了一款游戏叫<AA>.在最近IOS只是弹出一个游戏.非常心脏的孩子,但有很多乐趣.今天,我们谈论它tangide(GameBuilderV2.0)用控件UICanvas实现它. 在 ...

  9. WPF Path.Data 后台代码赋值

    Path path = new Path(); string sData = "M 250,40 L200,20 L200,60 Z"; var converter = TypeD ...

  10. 解决Android Studio运行时报Error:java.lang.NullPointerException (no error message)错误

    原文:解决Android Studio运行时报Error:java.lang.NullPointerException (no error message)错误                    ...