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; } }
参考文献:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验