问题描述:在老项目数据库中,中文显示乱码,编码格式未知,一度怀疑进行了加密。
问题定位:最终,经过大佬的尝试,发现是编码格式的问题。老项目中是将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;
}
}
参考文献:
- Qt | QTextCodec类使用详解、GBK和UTF8编码互转、QString的toLocal8bit和toLatin1区别
- ISO-8859-1和GBK互转
来源链接:https://www.cnblogs.com/wsry/p/18648135
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容