QT編碼轉換

2021-10-09 19:26:49 字數 1304 閱讀 6814

最近在做乙個國外的專案,其中有乙個需求是,管理系統給linux 終端推送通知的功能,管理系統給終端傳送通知的編碼是utf-8的,qt介面上展示通知的同樣要求utf-8 ,所有這沒有一點毛病啊,但是突然測試給我提了乙個bug,在列印出來的通知中是亂碼的。我想著,這個問題不大,因為印表機需要的是gb2312編碼的,我轉一下不就完事了

qtextcodec* utf8codec= qtextcodec::codecforname("utf-8");

qtextcodec* gb2312codec = qtextcodec::codecforname("gb2312");

qstring strunicode= utf8codec ->tounicode(strdata.tolocal8bit().data());

qbytearray bytegb2312= gb2312codec ->fromunicode(strunicode);

prnstring(bytegb2312.data()); //專案中列印文字的介面

然而,列印的文字這種有很多的?(就是英文單詞之間的空格都成了?) 我就開始納悶了

原來,我說接收到的文字中的英文單詞之間的並不是真正的空格,它是乙個無法識別的字元,也就是說,在編碼轉換過程中,其實已經轉成了gb2312編碼,只不過在列印的時候,它是乙個無法識別的字元,所以就成了?

解決方法: 將這個特殊的字元替換成空格

qtextcodec* utf8codec= qtextcodec::codecforname("utf-8");

qtextcodec* gb2312codec = qtextcodec::codecforname("gb2312");

//utf-8轉gb2312的時候,會有不可識別的" "字元,將此字元替換成空格,注意第乙個""不是空格

qstring strdata = txt.replace(" ", " ");

qstring strunicode= utf8codec ->tounicode(strdata.tolocal8bit().data());

qbytearray bytegb2312= gb2312codec ->fromunicode(strunicode);

prnstring(bytegb2312.data());

怎樣去獲取這個特殊的字元?

可以用notpad++開啟需要轉換文字,你會看到乙個正方形框框的字元,將此字元複製到 qstring strdata = txt.replace(" ", " "); 的第乙個「 」內,否則,無法將此字元替換。

Qt編碼與轉換問題彙總

qstring會用utf 16編碼儲存,而qdebug 等i o函式會以utf 8編碼處理。其實轉換後的位元組流是正確的,只是顯示時用了和位元組流不同的編碼方式處理導致亂碼 qt缺省會使用本機編碼,所以對於中文系統,下面這句設定是多餘的 qtextcodec setcodecforlocale qt...

QT開發 遞迴轉換檔案編碼

第一步 先用這個檔案原先的編碼讀取檔案內容存到區域性變數當中,然後呼叫qfile remove 方法刪除檔案 第二步 建立乙個跟原先檔名同名的檔案,然後設定你要轉換的編碼,使用qtextsream setcodec 方法 將檔案內容寫入這個新建立的檔案當中 以上兩步就可以實現給檔案轉碼。void w...

Qt的字符集編碼以及轉換

qt 使用unicode編碼來儲存操作字串,但很多情況下,我們不得不處理採用其他編碼格式的資料,舉例來說,中文多採用gbk和big5編碼,而日本則多採用shift jis or iso2022編碼。本文將討論如何將其他編碼格式的字串轉化成採用unicode編碼的qstring method 1 qs...