qstring會用utf-16編碼儲存,而qdebug()等i/o函式會以utf-8編碼處理。其實轉換後的位元組流是正確的,只是顯示時用了和位元組流不同的編碼方式處理導致亂碼
// qt缺省會使用本機編碼,所以對於中文系統,下面這句設定是多餘的
qtextcodec::setcodecforlocale(qtextcodec::codecforname(「gbk」));
//qbytearray轉qstring
qbytearray ba;
qstring s = qstring(ba); // 強制轉換
//qstring轉qbytearray
qstring s="abc";
qbytearray ba = s.tolocal8bit(); // 受setcodecforlocale影響,會轉換為設定的編碼。如果本機不支援指定編碼,則會按tolatin1處理
qbytearray balatin1 = str1.tolatin1(); //不受setcodecforlocale影響,強制轉換為iso-8859-1編碼
qbytearray butf8 = str1.toutf8(); // 不受setcodecforlocale影響,強制轉換為utf-8編碼
qbytearray為漢字時,輸出會出現亂碼,解決方法:
qbytearray ba = "漢字";
qtextcodec* tc = qtextcodec::codecforname("gbk");
qdebug()"\xba\xba\xd7\xd6"
qdebug()<"????"
qdebug()
wchar_t a[10];
qstring str1= qstring::fromwchararray(a);
int/char 轉 16進製制qstring 補0
int a = 0x0483;
qstring str1 = qstring("%1").arg(a,4,16,qlatin1char('0'));
qstring 轉 char *
qstring str1 = "hello";
qbytearray a = str.tolatin1();
char *b = a.data
();
char * 轉 qstring
char *b;
qstring str2 =qstring(qlatin1string(b));
參考:qt字元編碼、亂碼的一點總結 QT編碼轉換
最近在做乙個國外的專案,其中有乙個需求是,管理系統給linux 終端推送通知的功能,管理系統給終端傳送通知的編碼是utf 8的,qt介面上展示通知的同樣要求utf 8 所有這沒有一點毛病啊,但是突然測試給我提了乙個bug,在列印出來的通知中是亂碼的。我想著,這個問題不大,因為印表機需要的是gb231...
QT 編碼問題
執行字符集 可執行應用程式內使用何種字元編碼。編譯器會將原始碼字符集轉換為執行字符集 bom識別符號 識別原始檔編碼 qt5中qstring內部採用unicode字符集,utf 16編碼。建構函式qstring qstring const char str 預設使用fromutf8 將str所指的執...
前端編碼問題彙總
眾所周知,字元的編碼方式有兩種慣例,一種是很古老的對ascii碼 做某種語言子集的擴充套件,比如big5和gb2312,分別是繁體字擴充套件和簡體字擴充套件,兩者互不相容,與之類似的編碼還有iso系列,各個拉丁文的子編碼集合也不相互相容,這種編碼的好處是編碼集合很小,壞處是不能同時使用多種語言,於是...