5.万能解决方案

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

5.万能解决方案

 

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

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

5.万能解决方案

“我爱中国”这四个汉字是由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官方推荐的就是这种用法,具体在哪里忘了。理论上讲这种方法是可以万能的,缺陷就是可读性差,如果实在解决不了编码问题,可以作为保底方案。