Qt中文亂碼以及漢字編碼

2021-10-04 12:52:10 字數 1246 閱讀 5867

一、背景介紹

1.unicode是乙個編碼方案

unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言、跨平台進行文字轉換、處理的要求。

2.unicode三種實現方式

utf8 占用一到四個位元組,英文乙個位元組,中文三個位元組

utf-16占用二或四個位元組

utf-32占用四個位元組

二、qt 字元顯示異常

在qt creator中,我們書寫的**檔案被強制轉換為 utf8,在簡體中文版的 windows 作業系統中,預設編碼卻是 gbk

當使用visual c++編譯程式的時候,它會分析原始檔採用何種編碼,有bom識別符號則可以正確識別其編碼是utf-8,若沒有bom識別符號則認為其使用本地字符集編碼(local字符集)。綜述,原始檔是utf8編碼,vc編譯器認為原始檔是利用本地字符集進行編碼的,當檢測到特殊字元的時候,自然會報「常量中具有換行符」。

三、解決方案

1.通常情況下設定原始檔**為utf8-bom格式,這樣vs編譯器才會用utf8編碼集來解釋

2.最常見的是利用qstring::fromlocal8bit完成對字串本地字符集到unicode字符集的轉換。

第乙個「你好」為啥輸出異常,因為源**是以utf8-bom形式儲存的,vs編譯器是利用gbk字符集去編譯的檔案。此時的第乙個「你好」是gbk字符集中的編碼,qt只認unicode編碼,自然輸出異常。

第二個「你好」已經完成了gbk字元編碼到unicode編碼的轉換,輸出自然正常。

如果已經設定了# pragma execution_character_set(「utf-8」),即修改vs編譯器的執行字符集。

此時的第乙個「你好」已經是utf8字符集中的編碼,而第二個「你好」通過qstring::fromlocal8bit將已經是utf8字符集中的編碼作為gbk字符集中的編碼再去進行轉換, 結果必定是在unicode中指向其他的字元。

解決Qt漢字編碼亂碼的問題

解決qt中文亂碼以及漢字編碼的問題 utf 8 gbk qt需要在main 函式指定使用的字元編碼。標頭檔案 include 一 qtextcodec codec qtextcodec codecforname gbk 情況1 qtextcodec setcodecfortr codec qtext...

漢字編碼問題

漢字編碼問題 由於常常要和漢字處理打交道,因此,我常常受到漢字編碼問題的困擾。在不斷的打擊與堅持中,也積累了一點漢字編碼方面的經驗,想和大家一起分享。一 漢字編碼的種類 漢字編碼中現在主要用到的有三類,包括gbk,gb2312和big5。1 gb2312又稱國標碼,由國家標準總局發布,1981年5月...

漢字編碼問題

漢字編碼問題 由於常常要和漢字處理打交道,因此,我常常受到漢字編碼問題的困擾。在不斷的打擊與堅持中,也積累了一點漢字編碼方面的經驗,想和大家一起分享。一 漢字編碼的種類 漢字編碼中現在主要用到的有三類,包括gbk,gb2312和big5。1 gb2312又稱國標碼,由國家標準總局發布,1981年5月...