Qt源程序 在 linux 与 windows 下因源文件编码问题导致中文乱码

来源:互联网 发布:单片机控制的智能台灯 编辑:程序博客网 时间:2024/04/29 21:21

当Qt编辑器使用系统编码的默认设置时


在windows 下,源程序中如果不包含中文,源文件使用的是ASCII编码,否则是GBK编码。
在Linux下,源程序是是用UTF-8编码的。


对于源文件中一个像“abc”这样的C语言字符串是不包含编码类型信息的,而Qt中QString是以Unitcode来保存字符串的。所以在对QString 对象进行初始化时QString 如果不知道编码方式就很可能出现乱码。


解决办法是在main中设置好编码方式。


windows :

    QTextCodec *codec = QTextCodec::codecForName("GBK");    QTextCodec::setCodecForLocale(codec);    QTextCodec::setCodecForCStrings(codec);    QTextCodec::setCodecForTr(codec);




Linux:

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");    QTextCodec::setCodecForLocale(codec);    QTextCodec::setCodecForCStrings(codec);    QTextCodec::setCodecForTr(codec);


值得注意的是,所有QString的赋值在时间上都必是在上述代码之后。这意味着不可以为全局的const QString赋值,全局的QString也不能在定义时初始化。


 如果你是在Windows中进行编程,当你把文件复制到Linux时,中文会出现乱码,Qt Creater会提示你在当前编码下无法编辑(如果没有提示,可能是Qt的版本太低),并有一个让你重新选择编码的按钮。这时选择GBK的方式打开文件,把文本复制出来,粘贴到一个新建的文本文件上,另存为UTF-8编码就可以正常显示了。 记得在main中把编码改成

QTextCodec *codec = QTextCodec::codecForName("UTF-8");



原创粉丝点击