Qt的跨平台特性是“一次编写,到处编译”,把Windows下写好的一个小程序源码直接复制过来尝试编译,结果遇到了各种中文乱码的问题。
系统:Mac OS,Qt版本:
Qt Creator版本
出现乱码的主要原因是:中文版windows默认gbk编码,而Linux/Mac默认为utf-8编码,原先的gbk编码被utf-8的编码解释就出现了乱码。
下面是各种乱码的解决方法。
编辑器显示乱码
this->setWindowTitle("������������");
这个好解决,载入时Qt Creator会提示是否重新载入编码,选择UTF-8即可:
无法输入中文
发现无法输入中文,即便是中文输入法。解决方法参考:
https://blog.csdn.net/weixin_33762130/article/details/91960441
【偏好设置】->【环境】->【语言】下拉框,设置为Chinese(China),保存,重启即可。
编译出现warning,界面仍然乱码
编译时,所有出现中文的代码,都会出现一大堆warning:
warning: illegal character encoding in string literal [-Winvalid-source-encoding]
程序界面中的中文也仍然是乱码。
费了很大功夫,终于找到了答案,把文件编码按照如下设置即可:
文件编码设置以后新建项目或文件时,就直接可以正常显示中文了。
扩充知识:常见中文编码的区别
中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。
汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时扩充了很多。
中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。
每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。终于,有个叫 ISO 的组织看不下去了。他们一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16,分别每次传输 8个位和 16个位。
于是就会有人产生疑问,UTF-8 既然能保存那么多文字、符号,为什么国内还有这么多使用 GBK 等编码的人?因为 UTF-8 等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。但是目前的电脑来看,硬盘都是白菜价,电脑性能也已经足够无视这点性能的消耗了。
结论:推荐所有的网页使用统一编码:UTF-8
网友评论