QT中文亂碼,編碼轉換方案
阿新 • • 發佈:2020-12-12
常規套路
//1、main函式前面加巨集
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
//2、main函式裡面指定編碼
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
//3、針對字串操作
QStringLiteral(“字串”);//返回一個QString的例項
QString QString::fromLocal8Bit(const char *str, int size = -1);
QString QString::fromLocal8Bit(const QByteArray &str);
指定編碼
常規套路無效時,可以嘗試指定字串的編碼,此方法在QT呼叫外部程式時很有效,比如cmd命令列、印表機驅動等。
//1、從外部程式獲取字串,轉換編碼,在Qt程式裡顯示中文
char cOutVersion[100];
//獲取版本資訊
iRet = GetDriverVersion(cOutVersion);//呼叫外部介面獲取字串
//強制轉換編碼,顯示中文
QTextCodec *gbk= QTextCodec::codecForName("GBK");
QString t_cOutVersion = gbk->toUnicode(cOutVersion);//獲取的字串可以顯示中文
//2、Qt輸出字串到外部程式,在外部程式顯示中文
QString str_printInfo = "CB532測試列印資訊";
//當前檔案是utf-8編碼,印表機介面是GBK編碼,需要轉換
QTextCodec *gbk = QTextCodec::codecForName("gbk");
QByteArray array_printInfo = gbk->fromUnicode(str_printInfo);
//呼叫外部介面,列印支援中文顯示
PrintLine(array_printInfo.data());