中文QString轉成char型別中造成亂碼的原因

2021-06-08 21:13:48 字數 1297 閱讀 2775

qstring內部採用的是unicode編碼,但是unicode編碼有很多種,在實際應用時應制定具體的編碼形式,常見的有gbk、gb2312和utf-8等。

utf-8是解決國際上字元的一種多位元組編碼,它包含全世界國家所用到的所有字元,通用性強。英文單位元組表示,中文需要三個位元組表示。

gbk是國家標準gb2312基礎上擴容後並相容gb2312標準,無論英文中文都用雙位元組來表示。gbk包含全部中文字元,是中文國家標準的一種編碼方式。gb2312是簡體中文的碼,gbk則支援簡體中文和正體中文。

指定unicode的編碼方式一般採用的方法是在main函式中新增如下語句:

qtextcodec

::setcodecfortr(

qtextcodec

::codecforname(

"gbk"

));

qtextcodec

::setcodecforcstrings(

qtextcodec

::codecforname(

"gbk"

));qtextcodec

::setcodecforlocale(

qtextcodec

::codecforname(

"gbk"

));

此處指定unicode編碼方式為gbk編碼; 

qstring轉換char操作為

qstring path("我是漢字");

qbytearray

cpath

=path.tolocal8bit();  注意,這個qbytearray

物件一定要建立

char *p = cpath.data();

此時便完成了中文qstring到char型別的轉換。但是我們單步執行程式,從除錯視窗中觀察char中的資料,發現不是」我是漢字「,而是亂碼"îòê纺×ö"

這時,我們就會懷疑我們的轉換沒有成功,其實不然。因為在我們當前所用的qt軟體介面中所顯示的內容是採用latin編碼後的結果,而我們的qstring類中的內容」我是漢字「當前採用的是gbk編碼,編碼結果為ce d2 ca c7 ba ba d7 d6,而這八個位元組的資料在latin中就是亂碼"îòê纺×ö",我們將cpath物件展開可看到這八個位元組的資料正是ce d2 ca c7 ba ba d7 d6,所以轉換正確。

中文QString轉成char型別中造成亂碼的原因

qstring內部採用的是unicode編碼,但是unicode編碼有很多種,在實際應用時應制定具體的編碼形式,常見的有gbk gb2312和utf 8等。utf 8是解決國際上字元的一種多位元組編碼,它包含全世界國家所用到的所有字元,通用性強。英文單位元組表示,中文需要三個位元組表示。gbk是國家...

QT中文的 QString 與 char 轉換

1 qstring 轉換成 char qt中要將qstring轉換成char 型別,首先要將其轉換為qbytearray類,再利用qt中qbytearray類封裝的介面將其轉換為char 型別。方法如下 qstring s char msg qbytearray ba s.tolatin1 msg ...

將QString轉換為char

官方說明 注意在呼叫qbytearray.data 之前,必須要先顯示儲存這個bytearray。像這樣const char c str2 str2.tolatin1 data 會使程式崩潰,因為qbytearray沒有被儲存,呼叫data 前是不存在的,必須先顯式呼叫一次tolatin1 再呼叫d...