QT中文問題

字節順序標記(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做項目,遇到UI不能顯示中文的問題,發現有3種方法可以解決,先記錄一下

方法一
QString::fromLocal8Bit("你好中國")

方法二
QStringLiteral("你好中國")

方法三
在.cpp中加入
#pragma execution_character_set("utf-8")
然後正常輸入中文(“你好中國”)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章