QT中文亂碼關鍵幾點強調

2021-07-16 10:19:57 字數 1620 閱讀 3387

qt,相信使用的人很多用在跨平台上,然而要保證windows、linux同用乙份原始碼,就不得不考慮源**編碼問題了,在編碼發展上,我打賭未來肯定是要捨棄ansi轉向unicode編碼的,unicode又有多種編碼方式gbk(gb2312的公升級版),big5,utf8,utf16等。

win下預設gbk,linux(ubuntu)預設utf8,然而qt呢?qtcreator文字編輯器預設也是utf8檔案格式,bom目前存在則保留。所以通常設定

qtextcodec *codec = qtextcodec::codecforname("utf8");

qtextcodec::setcodecfortr(codec);

qtextcodec::setcodecforcstrings(codec);

qtextcodec::setcodecforlocale(codec);

就能解決大部分問題,通常很多人犯的錯誤,包括我接觸過的別人寫的專案都是各種檔案格式ansi、utf8、gbk糅合在乙個專案中(估計都是直接從網上download的**,自己沒整理就直接使用檔案)。導致這裡沒亂碼,那裡有亂碼,這種現象。 

在某些情況下也是有問題的,因為程式可能讀到系統的中文路徑,或者呼叫中文路徑下的外部程式,這時候如果系統是

gb2312

就有問題了。

因為中文路徑的編碼是採用

utf-8

存到qstring

裡的,系統讀中文路徑解碼的時候採用的卻是系統的

gb2312

,所以會調不起帶中文路徑的外部程式。

以上問題下面方法可以解決:

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

qtextcodec::setcodecfortr(codec);

qtextcodec::setcodecforlocale(qtextcodec::codecforlocale());

qtextcodec::setcodecforcstrings(qtextcodec::codecforlocale());

對於外部字串編碼解碼全部採用本地編碼。

還有一種亂碼叫編碼亂碼,比如說,源**utf8編碼,

qtextcodec *codec =qtextcodec::codecforname("gbk");
就會導致亂碼,反之亦然,故源**與程式中使用必須統一,其實這一點是所有編譯器都應該遵循的原則。因此,

windows環境下,qt creator+vs編譯器

1、如果該工程不需要跨平台使用(只在win),那麼工程設定請使用gbk的編碼方式.

2、如果該工程要跨平台使用(win+linux),那麼工程設定請使用utf-8+bom的編碼方式.

linux環境下,qt creator+gcc,

預設是utf-8(無bom)編碼方式,

綜上:不考慮跨平台的話可以用預設設定,考慮到跨平台,建議選擇utf-8+bom的編碼方式.具體設定如下圖

qt 中文亂碼 Qt中文亂碼問題

接觸了qt,由於習慣中vs,如果使用vs寫qt 剛接觸很快就發現有中文亂碼問題,我的解決方法如下 新建乙個標頭檔案,比如qtchcharset.h,標頭檔案中內容如下 pragma once ifdef q os win q os win 新增後支援gb2312,utf 8 bom,unicode ...

Qt中文亂碼

laguage c title 出現頻率最高的辦法 include intmain int argc,char argv 很多地方都會告訴你,這樣可以實現qt支援中文,包括我看的教程書上也是,他甚至告訴我要支援中文必須加入這段 但我想告訴你,這個辦法是有問題的,而且這個問題還不小!我在兩台同樣是xp...

QT中文亂碼

兩邊都是win7系統,不知道為什麼在我的機器上就可以正常顯示,而把exe檔案加上必要的dll一起移到另一台win7系統電腦上時,button,label什麼的都顯示亂碼了,而且qtextedit裡面的卻能夠正常顯示。請問下這是因為什麼問題呢?通過設定以下 也沒能解決問題 c c code 1234 ...