Qt學習之路【1】:QT顯示中文問題


最近,公司項目的GUI界面使用的是Qt,研究了近兩個月的Qt發現中文顯示確實是一個問題,這個問題中主要存在兩方面的問題:

【1】中文顯示;

【2】中文亂碼;

其中【1】問題出現的情景是:Qt的界面只有英文字母,中文一個都不顯示,也不會出現亂碼;【2】問題出現的情景是:Qt界面本來顯示漢字的地方全部被亂碼所代替。

【1】問題產生的原因是:Qt字庫中沒有相應的字體,提供給Qt的界面

【2】問題產生的原因是:中文編碼轉換的問題。

字節順序標記(BOM)

出現在字節流的開頭,在windows下保存UTF-8編碼的文件時,會在開始的地方插入 BOM(0xEF,0xBB,0xBF),讓編輯器識別文件是否為UTF-8編碼。而標准的UFT-8是不帶BOM的。也就是說,如果再Linux系統下,文件編碼格式可以忽略BOM。。
注意:在Qtcreator(Linux平台下)中的“Tool”->"Options"下設置“UTF-8 BOM”時不要選擇“Add If Encoding Is UTF-8“,如果選擇這一項,在寫代碼的時候會添加BOM,而這樣在編譯的時候就會報錯。

幾種編碼格式

UTF-8

Unicode TransformationFormat-8bit,允許含BOM,但標准的UTF-8不含BOM,用來統一國際上的字符,通用性強,屬於國際編碼,它對英文使用8位(即一個字節),中文使用24為(三個字節)來編碼。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。

GBK /GB2312

GBK是國家標准GB2312基礎上擴容后兼容GB2312的標准。GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示,為了區分中文,將其最高位都設定成1。GBK包含全部中文字符,是國家編碼,通用性比UTF8差。

Unicode

Unicode中存儲了很多種編碼的字符,它可以看做是很多種編碼格式的集合。

亂碼產生的原因

文件的編碼格式有多種,因此同一的二進制文件可以被翻譯成不同的符號。那么當一個文件用這種編碼方式編輯但是卻使用另一中編碼方式打開的時候,就會出現亂碼,而產生亂碼的原因就是兩種編碼格式的字符的存儲方式是不同的。
那么在Qt中出現亂碼是怎么回事呢?
Linux平台下的Qtcreator的編碼格式是UTF-8,中文使用三個字節來編碼;而Qt中的QString使用Unicode來編碼的。Unicode中有很多種編碼格式的字符。那么當把一串中文賦值給QString定義的變量A時,就會存在一個問題,這串文字是以一種什么樣的編碼存儲到Unicode中的?如果是以UTF-8的方式存儲的,那么Qt上的字體就會顯示正常;如果是以其他的編碼方式存儲的則會出現亂碼。
在Qt程序中,如果不指明使用哪種編碼存儲到Unicode,那么會默認Latin-1編碼,這樣在Qt顯示中文的時候就會出現亂碼!
因此當在程序中貼上上圖的幾行代碼時,其作用就是指明程序中的中文使用哪種編碼存儲到Unicode中

QT(桌面)中文顯示以及亂碼解決

自己的Qt中沒有對應的漢字庫,以至於沒法顯示中文,原因是開始在編譯Qt時沒有加上下面的參數
解決方法:重新編譯Qt庫
配置:./configure  -fontconfig
編譯:make
安裝:make install
測試:重新編譯完成后,進入到Qt安裝目錄下的bin目錄下,運行./qtconfig,在出現的界面中選擇font,字體出現wenquan***的字體,說明安裝成功。然后設置了這個字體,中文就顯示出來了

至於亂碼,則貼上上圖的代碼就可以了。

QT(嵌入式)中文顯示以及亂碼解決

我遇到的主要是中文顯示的問題,剛開始開發板的屏幕上沒有一個漢字,亂碼也沒有。我就知道是字庫的問題。下載了文泉驛的字體放到了../font文件夾下面也不行(此文件夾下有好多的字體),最后將此文件夾下的字體刪除至只剩下一種,文字就顯示出來了。經過一步步測試,最終找到原因:沒有設置使用哪種字體。因為這個程序是以前公司的人寫的,讓我調試Bug,坑人。那么為什么程序沒有確定選擇使用哪種字體時,只有一種字體就會顯示中文,而多種字體之后就不會顯示字體呢?
這個問題我沒有去找答案。可能是因為是:多種字體的時候,程序無法確定使用哪種字體的緣故吧。

 

參考資料:

百度百科:http://baike.baidu.com/subview/126558/5073178.htm
字符常見的幾種編碼方式:http://blog.csdn.net/csywwx2008/article/details/17137097
qt中文亂碼問題:http://blog.csdn.net/brave_heart_lxl/article/details/7186631
(原創)QT 4.7支持中文(QT4.7)(中文)(makeqpf)http://www.cnblogs.com/liu_xf/archive/2011/07/05/2098144.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM