QT乱码总结5.万能解决方案

QT乱码总结0.Qt乱码产生因素
https://blog.csdn.net/liujiayu2/article/details/103167953

QT乱码总结1.Unicode 和 UTF-8
https://blog.csdn.net/liujiayu2/article/details/103168020

QT乱码总结2.gbk和ANSI和gb2312的区别
https://blog.csdn.net/liujiayu2/article/details/103168168

QT乱码总结3.UNICODE有无BOM
https://blog.csdn.net/liujiayu2/article/details/103168236

QT乱码总结4.细谈本地编码
https://blog.csdn.net/liujiayu2/article/details/103168249

QT乱码总结5.万能解决方案
https://blog.csdn.net/liujiayu2/article/details/103168272

QT乱码总结6.编码测试和总结一
https://blog.csdn.net/liujiayu2/article/details/103168289

QT乱码总结7.编码测试和总结二
https://blog.csdn.net/liujiayu2/article/details/103168301

QT乱码总结8.编码测试和总结三
https://blog.csdn.net/liujiayu2/article/details/103168307

QT乱码总结9.编码测试和总结四
https://blog.csdn.net/liujiayu2/article/details/103168317

QT乱码总结编码测试工程:
https://download.csdn.net/download/liujiayu2/11987065

 

qt乱码问题有没有一个终极解决方案,我不想关心什么乱七八糟的编译器,操作系统,文本采用的鸟编码,我就想我一写他到哪里都是正确的。答案是有,我们看一下qt自己是怎么处理中文的。新建一个工程,添加一个标签,写上中文“我爱中国”,如图,

 

看一下,qt是怎么处理这个事情的。

经过查看qt自动生成的代码,我们找到了它,

“我爱中国”这四个汉字是由12个3位数的数字转化过来的,这12个数字很是眼生啊,回顾前面测试时候我们总结的编码,

/测试编码

我爱中国

ANSI(GBK)编码:CE D2 B0 AE D6 D0 B9 FA

UTF-8编码:E6 88 91 E7 88 B1 E4 B8 AD E5 9B BD

UTF-8编码(bom):EF BB BF E6 88 91 E7 88 B1 E4 B8 AD E5 9B BD

UNICODE编号:\u6211\u7231\u4e2d\u56fd

/

感觉八竿子打不着啊,犯了好一阵子难,最终发现了规律,首先12个数字,我们看到只有UTF-8编码无BOM正好是12个。\346怎么和E6对应起来啊,拿起计算机,转化E6位10进制,230,转化为八进制正好是346,哈哈,这也行,从业C++开发8-9年,第一次看到八进制用到实战中。

看看如何通用化:

QApplication::translate("TestClass", "\346\210\221\347\210\261\344\270\255\345\233\275", 0, QApplication::UnicodeUTF8)

这个函数返回的是一个QString,第一个参数随意填写,第二参数是汉字utf-8编码的八进制。以后遇见汉字就这么处理,这样就能拍出一切干扰保证无乱码。有朋友会问,第二参数,弄得时候有点麻烦事儿,这里介绍一个简单方法:既然qt可以自动生成,以后遇见汉字就让qt帮助我们生成,(专门写个临时工程,帮助生成八进制的汉字)

 

最后,以前看到过qt官方推荐的就是这种用法,具体在哪里忘了。理论上讲这种方法是可以万能的,缺陷就是可读性差,如果实在解决不了编码问题,可以作为保底方案。

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/liujiayu2/article/details/103168272