Qt界面顯示亂碼問題


Qt界面顯示及內部函數都是用QString作為參數進行的。一般出現亂碼原因都是QString沒有按照正確的編碼格式顯示文本,導致出現亂碼。QString內部采用Unicode編碼,可以顯示任何文本,但是QString在顯示某個文本前必須知道此文本是什么編碼,QString才能把此文本的編碼格式轉換成Unicode編碼進行正確顯示。就和發電報的摩斯電碼一樣,收報人員必須知道你是按那個密碼本編的報文,他才能把報文轉換成英文,再從英文翻譯為中文顯示(這里這樣說不准確,摩斯密碼可以直接翻譯成中文)。

一般做國際版推薦統一UTF-8編碼,包括源文件編碼格式及內部字符串編碼格式

下面是QString幾個常用的轉換函數及說明文本本身編碼格式的函數,通過下面這些函數及其類似函數的組合,可以正確的顯示所以文本

QString:: fromAscii():說明文本是Ascii編碼

QString:: toAscii():QString無此成員

QString:: fromLatin1(): 說明文本編碼格式為Latin-1(ISO-8859-1)

QString:: toLatin1():返回Latin-1編碼的文本

QString:: fromUtf8():說明此文本是utf-8編碼

QString:: toUtf8():返回utf-8編碼的文本

QString:: fromLocal8Bit():說明此文本是操作系統默認字符編碼,中文系統默認(gb18030)

QString:: toLocal8Bit():返回操作系統默認字符集編碼的字符串

       可能有人覺得用上面哪些函數轉來轉去太麻煩了,那么可以使用下面的函數,設置CString的編碼格式,或者說是告訴QString,程序中的文本默認都是這樣編碼的。

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

但是通過上面的編碼函數到底要把編碼格式設成GBK還是UTF-8還是其他的編碼呢,一般來說就是源代碼是GBK,就用GBK,源代碼是UTF-8就用UTF-8。但有一個例外,如果你保存成了帶BOM的UTF-8而且用的微軟的cl編譯器,此時仍是GBK

其實上面說了那么多,主要還是要保證顯示的編碼格式與文本本身的編碼格式一致。


免責聲明!

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



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