Qt那些事0.0.5

碰到了中文乱码问题。

虽然是自己做了件令自己都不齿的事情,但是情急之下,暂且如此:将中文硬编码进代码中。

我也想通过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的方法是使用翻译文件,需要重新研究一下。

原博客真的很棒,留言还不够,还要特意佩服一下。

转载于:https://my.oschina.net/ev4n/blog/2249014

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值