位元組順序標記(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,而這樣在編譯的時候就會報錯。
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")
然後正常輸入中文(「你好中國」)
qt 中文亂碼 Qt中文亂碼問題
接觸了qt,由於習慣中vs,如果使用vs寫qt 剛接觸很快就發現有中文亂碼問題,我的解決方法如下 新建乙個標頭檔案,比如qtchcharset.h,標頭檔案中內容如下 pragma once ifdef q os win q os win 新增後支援gb2312,utf 8 bom,unicode ...
QT 中文亂碼問題
1,將設定改為 如果是utf 8編碼,則新增 2,cpp檔案開始新增 pragma execution character set utf 8 根據 qt 的文件 中規定 qstring 的 const char 建構函式是呼叫 fromutf8 構造的。所以要求字串字面量是 utf 8 編碼的位元...
qt 中文亂碼問題
qtextcodec codec qtextcodec codecforname utf 8 qtextcodec setcodecfortr codec qtextcodec setcodecforlocale qtextcodec codecforlocale qtextcodec setcod...