QT中文亂碼問(wèn)題(字符串變量)


文章總結(jié)在最后面,想快速解決問(wèn)題的可以直接拉到最后。

一、使用變量顯示中文字符

到QT5以后,一般情況下要顯示中文字符最簡(jiǎn)單的就是使用

QStringLiteral(“我是中文”)

但是QStringLiteral所用參數(shù)只能是字符串常量,不能為變量。

所以當(dāng)使用類似QStringLiteral(str)的代碼時(shí)候會(huì)報(bào)錯(cuò):

error: expected primary-expression before 'enum'
         enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \
         ^

因此想到使用

string str = "這是中文";
QString::fromLocal8Bit(str);

但會(huì)發(fā)現(xiàn)qDebug后輸出的是

"榪欐槸涓\uE15F枃"

這時(shí)候使用QString::fromStdString(str)就能解決這個(gè)問(wèn)題

string str = "這是中文";
QString::fromStdString(str)

輸出結(jié)果:

"這是中文"

以上是針對(duì)于字符串變量是string類型的情況,若是QString則先將其轉(zhuǎn)成string,參考代碼如下:

QString data = query.value(i).toString();//獲得數(shù)據(jù)庫(kù)中第i個(gè)字段的值
QByteArray cdata = data.toLocal8Bit();
string str = string(cdata).data();//這兩行換成string str = data.toStdString();依然會(huì)亂碼
qDebug()<<QString::fromStdString(str);//輸出轉(zhuǎn)換成中文字符的結(jié)果

二、出現(xiàn)部分中文亂碼

如果上面的方法還不行,就用以下方法:
該方法同時(shí)可以解決部分亂碼問(wèn)題,比如末尾句號(hào)變成‘??’,‘(’后的漢字變成‘??’:

這里獲取mysql第二個(gè)字段testcol的值:


這時(shí)候mysql中的數(shù)據(jù)是沒(méi)問(wèn)題的:


但qDebug的結(jié)果這三個(gè)地方都出現(xiàn)了部分亂碼:


解決方法:

直接在main函數(shù)里加上:

#include <QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

QT5可以用,有這個(gè)函數(shù)的。

就像這樣:

Paste_Image.png

超簡(jiǎn)潔的總結(jié)

  • 一、QT5使用變量顯示中文字符(不能用QStringLiteral):
string str = "這是中文";
QString::fromStdString(str)
  • 二、部分中文亂碼(如“??”),在主函數(shù)添加:
#include <QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,636評(píng)論 18 399
  • 火箭撬是一種空氣動(dòng)力學(xué)試驗(yàn)設(shè)備,利用推力強(qiáng)大的火箭助推器,推動(dòng)測(cè)試物體在類似鐵路的專用滑軌上高速前進(jìn),再用高速攝影...
    liseri閱讀 2,050評(píng)論 0 0
  • 在股市的運(yùn)轉(zhuǎn)過(guò)程當(dāng)中,大約有一半數(shù)以上的時(shí)間是處于不漲不跌的僵持狀態(tài)。通常稱這種狀況為“盤局股市”。那么面對(duì)著這種...
    無(wú)丶醉心閱讀 390評(píng)論 0 0

友情鏈接更多精彩內(nèi)容