Qt中文乱码的一种解决方法(ISO-8859-1和GBK编码互转)


问题描述:在老项目数据库中,中文显示乱码,编码格式未知,一度怀疑进行了加密。

问题定位:最终,经过大佬的尝试,发现是编码格式的问题。老项目中是将GBK编码的中文字符按照ISO-8859-1编码存入,导致乱码。

解决方法(Qt):

void test()
{
 // 读取数据库
 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转换成ISO-8859-1编码
 QByteArray b1 = codec_iso->fromUnicode(b);
 // 再用GBK编码转换成unicode
 QString s = codec_gbk->toUnicode(b1);
 // 打印输出是否正确
 qDebug() << s;
 }
}


参考文献:

作者:薄暮知秋原文地址:https://www.cnblogs.com/wsry/p/18648135

%s 个评论

要回复文章请先登录注册