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;
    }
}

参考文献:

  • Qt | QTextCodec类使用详解、GBK和UTF8编码互转、QString的toLocal8bit和toLatin1区别
  • ISO-8859-1和GBK互转

来源链接:https://www.cnblogs.com/wsry/p/18648135

© 版权声明
THE END
支持一下吧
点赞5 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容