1.Qt Creator -> 工具 -> 選項 -> 環境 - >概要 -> 語言
Qt Creator自己界面的語言選擇,與cpp文件編碼無關,與可執行文件顯示編碼無關
從新打Qt Creator 此設置才能生效,這個惟一選擇<Chinese>linux
2.Qt Creator -> 工具 -> 選項 -> 文本編輯器 -> 默認文件編碼windows
決定cpp文件編碼,不一樣平臺下此設置要相同。若是不一樣,cpp文件會有好多亂碼,且不能被編輯,但不影響編譯。從新打Qt Creator 此設置才能生效,這個推薦選<UFT-8>,由於linux下是這個。若是打開的文件不是UFT-8:Qt Creator -> 編輯 -> 選擇編碼,選擇<根據編碼從新載入>這步選擇文件的原始編碼,再<根據編碼保存>這步選擇須要保存的目標編碼數組
3.QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
只與這個相關QString str = tr("中文")。注意,相關的是轉換過程,QString自己是unicode,不會影響到QString,這個必須和Qt Creator -> 工具 -> 選項 -> 文本編輯器 -> 默認文件編碼相同。推薦選<UFT-8>編輯器
4.QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
只與這個相關QString str = QString("中文")。注意,相關的是轉換過程,QString自己是unicode,不會影響到QString,這個必須和Qt Creator -> 工具 -> 選項 -> 文本編輯器 -> 默認文件編碼相同。推薦選<UFT-8>函數
5.QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
只與這個相關QString str = QString::fromLocal8Bit("中文")。
以上2個最好都不用,用如下的工具
// 常規作法舉例之GB2312 ,注意"UTF-16"的輸入是要帶BOM的
QTextCodec *pCodec = QTextCodec::codecForName("GB2312");// "UTF-8", "UTF-16"
GB2312轉QString: pCodec->toUnicode();
QString轉GB2312: pCodec->fromUnicode();ui
// 另外QString類分別針對"UTF-8", "UTF-16"作了專門的函數, 固然結果同常規作法是同樣的,例子以下:編碼
// Unicode(utf8)(3個字節/漢字, 1個字節/字母)spa
UTF-8轉QString: QString::fromUtf8();code
QString轉UTF-8: QString.toUtf8();
// Unicode(utf16) Unicode(ucs2) Unicode(iso-10646-ucs-2) 2個字節/字符,也是windows記事本里那個Unicode
// qt中表示UTF-16要用ushot,不要用wchar_t(wchar_t大小根據編譯器而定)
UTF-16轉QString: QString::fromUtf16(); //這個帶2個字節的BOM頭,[0xFF 0xFE](61,00) 或者[0xFE 0xFF](00,61)
QString轉UTF-16: QString.utf16(); //返回以0結尾的ushot數組。
6.UI界面控件中可直接寫對應中文內容,而不須要另外的轉換
由於QString自己是unicode,保存到<ui_***.h>文件文件時是這樣寫的:
label->setText(QApplication::translate("Dialog", "\346\210\221\344\273\254", 0, QApplication::UnicodeUTF8));或
label->setText(QString::fromUtf8("\346\210\221\344\273\254"));
7.文本文件的編碼
windows平臺文本文件有BOM
ANSI:沒有文件頭,2字節/漢字,1字節/英文
UTF-8:文件頭[0xEF,0xBB,0xBF],3字節/漢字,1字節/英文
Unicode:文件頭[0xFF,0xFE],2字節/漢字,2字節/英文
Unicode big endian :文件頭[0xFE,0xFF],同Unicode,字節序相反
Linux平臺UTF-8和GB2312文件都沒有BOM
Linux平臺UTF-16同windows同樣,有BOM且相同
8.Qt支持的文本編碼 ("GBK", "CP936", "MS936", "windows-936", "roman8", "hp-roman8", "csHPRoman8", "TIS-620", "ISO 8859-11","WINSAMI2", "WS2", "Apple Roman", "macintosh", "MacRoman", "windows-1258", "CP1258", "windows-1257","CP1257", "windows-1256", "CP1256", "windows-1255", "CP1255", "windows-1254", "CP1254", "windows-1253","CP1253", "windows-1252", "CP1252", "windows-1251", "CP1251", "windows-1250", "CP1250", "IBM866", "CP866","csIBM866", "IBM874", "CP874", "IBM850", "CP850", "csPC850Multilingual", "ISO-8859-16", "iso-ir-226", "latin10","ISO-8859-14", "iso-ir-199", "latin8", "iso-celtic", "ISO-8859-13", "ISO-8859-10", "iso-ir-157", "latin6", "ISO-8859-10:1992", "csISOLatin6", "ISO-8859-9", "iso-ir-148", "latin5", "csISOLatin5", "ISO-8859-8", "ISO 8859-8-I", "iso-ir-138", "hebrew", "csISOLatinHebrew", "ISO-8859-7", "ECMA-118", "greek", "iso-ir-126", "csISOLatinGreek", "ISO-8859-6", "ISO-8859-6-I", "ECMA-114", "ASMO-708", "arabic", "iso-ir-127", "csISOLatinArabic", "ISO-8859-5","cyrillic", "iso-ir-144", "csISOLatinCyrillic", "ISO-8859-4", "latin4", "iso-ir-110", "csISOLatin4", "ISO-8859-3", "latin3","iso-ir-109", "csISOLatin3", "ISO-8859-2", "latin2", "iso-ir-101", "csISOLatin2", "KOI8-U", "KOI8-RU", "KOI8-R", "csKOI8R", "UTF-8", "ISO-8859-1", "latin1", "CP819", "IBM819", "iso-ir-100", "csISOLatin1", "ISO-8859-15", "latin9","UTF-32LE", "UTF-32BE", "UTF-32", "UTF-16LE", "UTF-16BE", "UTF-16", "System", "Iscii-Mlm", "Iscii-Knd", "Iscii-Tlg", "Iscii-Tml", "Iscii-Ori", "Iscii-Gjr", "Iscii-Pnj", "Iscii-Bng", "Iscii-Dev", "TSCII", "GB18030", "GB2312", "EUC-JP","ISO-2022-JP", "Shift_JIS", "JIS7", "SJIS", "MS_Kanji", "EUC-KR", "cp949", "Big5", "Big5-HKSCS", "Big5-ETen","CP950")