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官方推薦的就是這種用法,具體在哪里忘了。理論上講這種方法是可以萬能的,缺陷就是可讀性差,如果實在解決不了編碼問題,可以作為保底方案。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的QT乱码总结5.万能解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT乱码总结4.细谈本地编码
- 下一篇: QT乱码总结6.编码测试和总结一