碰到了中文乱码问题。
虽然是自己做了件令自己都不齿的事情,但是情急之下,暂且如此:将中文硬编码进代码中。
我也想通过tr+qm翻译进行转换,但是难过的是,tr之后,找不到或者不起作用。这个事情等找到解决方法再说。不过中文乱码问题,早晚要遇见。
先看这个《QTextCodec中的setCodecForTr等终于消失了 (Qt5)》,会了解到QString会使用默认的编码方式将内容解码成unicode保存。qt4使用全局的QTextDeco可以了,但是到了Qt5,删掉了对应方法,不过也提供了QString::fromXXX类型系列。
讲真,读了《VC2010下Qt5的中文乱码问题》,基本就了解了原因,因此解决方案也就存在了。经过简单测试,基本验证了那篇博客中说明的问题。
本人开发环境为Qt5.9.3+VS2015
1)Utf8编码。源文件使用utf8编码,如果存在中文的话,会在编译过程中出现
warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”
姑且不算乱码问题,看到这个就足够闹心,而且不是一个文件一个提示,是一个文件多个提示,应该与引用有关。
后来找到了解决方法,就是
2)BOM的Utf8。在使用该编码下能够压制住上面出现的warning。Qt Creator人性化的提供了与上面情况互换的右键菜单,在编辑的源文件中最后一项就是
Delete UTF-8 BOM on Save或者Add UTF-8 BOM on Save
当然在Creator的设置中也可以选择Tools->options->Text Editor ->Behavior->File Encodings->UTF-8 BOM。已存在的三种方法:删掉BOM,保持原样,添加BOM。
根据那篇博客的总结,目前的情况是:我为了在代码中使用中文,而且要减少warning,我就是使用utf-8 BOM保存源文件(这样中文字符也被编码了),同时使用QStirng::fromUtf8将原中文解码成unicode(python2.7中确实是decode到unicode),那么显示的就应该没问题了吧。不,有问题,VS编译器不干了。具体参考原博客。
于是乎又要进行一步操作就是需要让VS知道这个是使用了Utf8编码的。
#pragma execution_character_set("utf-8")
有人直接使用类似于GB2312编码源文件,这个就不需要做什么特殊的操作,原理原博客也有。但这样做不是很彻底啊,UTF8才是王道。哦,真正很qt的方法是使用翻译文件,需要重新研究一下。
原博客真的很棒,留言还不够,还要特意佩服一下。