Qt中文亂碼的一種解決方法(ISO-8859-1和GBK編碼互轉(zhuǎn))
問題描述:在老項目數(shù)據(jù)庫中,中文顯示亂碼,編碼格式未知,一度懷疑進行了加密。
問題定位:最終,經(jīng)過大佬的嘗試,發(fā)現(xiàn)是編碼格式的問題。老項目中是將GBK編碼的中文字符按照ISO-8859-1編碼存入,導致亂碼。
解決方法(Qt):
void test()
{
// 讀取數(shù)據(jù)庫
QSqlDatabase db;
QSqlQuery query(db);
QString str = QString("select * from db;");
query.exec(str);
while (query.next()) {
// 讀取亂碼
QSqlRecord record = query.record();
QByteArray data = record.value("data").toByteArray();
// 確定兩種編碼格式
QTextCodec *codec_iso = QTextCodec::codecForName("ISO-8859-1");
QTextCodec *codec_gbk = QTextCodec::codecForName("GBK");
// 將Qt讀取的QByteArray轉(zhuǎn)換成ISO-8859-1編碼
QByteArray b1 = codec_iso->fromUnicode(b);
// 再用GBK編碼轉(zhuǎn)換成unicode
QString s = codec_gbk->toUnicode(b1);
// 打印輸出是否正確
qDebug() << s;
}
}
參考文獻:

浙公網(wǎng)安備 33010602011771號