前言
我在编写Qt程序的时候经常出现中文乱码的情况,我只遇到了三种情况,对这三种情况有不同的解决方式。
第一种情况——默认编码错误
这种情况是Qt的编码不正确,没有使用UTF-8,但是我觉得大多数人都不是这种,现在Qt在安装之后似乎默认就是UFT-8,若是这种情况,可以参考以下解决方案对默认编码进行一个修改:
- 在Qt上方工具栏中找到“工具”并单击
- 选择“选项”
- 找到“文本编辑器”中的“行为”
- 将默认编码更改为UTF-8
在更改了编码之后,能解决因为编码无法解析汉字而导致的乱码问题。但是在大多数时候并不是这个情况,下面的情况更常见一点。
第二种情况——文字流编码错误(常见)
若是上面的方法还是不行,可能是使用了QTextStream读写了有中文内容的文本,但是它的编码却不是UTF-8,可以再试试以下方法,对其文本流指定编码:
在main函数中使用QTextCodec进行编码设置,注意需要包含头文件QTextCodec!!!,在进行更改前源代码是这样:
int main(int argc,char *argv[]){
QApplication a(argc,argv);
MainWindow w;
w.show();
return a.exec();
}
在main函数中添加两行内容,用于指定文字流编码:
#include <QTextCodec>
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
更改完后变为:
int main(int argc,char *argv[]){
//更改编码
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QApplication a(argc,argv);
MainWindow w;
w.show();
return a.exec();
}
这样应该就不会出错了。这种是最常见的情况,大多数人在进行修改后就能正常运行程序了。
有读者反馈说此方法无用,经查询这是Qt版本导致的,QTextCodec在Qt5、6中已经不再使用,Qt6中则是完全将其弃用,但是由于作者的Qt版本没这么高级,因此对于高版本Qt此种中文乱码问题我也不知道有什么解决办法。
第三种情况——没使用QString存储文字
在编写Qt项目的时候没有使用QString,而是使用的string或者其他的类型储存文字。
这个比较简单,将对象类型进行一个修改即可。
最后
这只是我遇到的三种,应该是还存在其他问题的,若是还遇到了别的情况可以将自己遇到的问题打在评论区或者私聊我,我看到了就会去试验,有了结果之后再对文章内容进行一个更新。