Qt編碼與轉換問題彙總

2021-08-21 12:20:13 字數 1341 閱讀 9801

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系列,各個拉丁文的子編碼集合也不相互相容,這種編碼的好處是編碼集合很小,壞處是不能同時使用多種語言,於是...