首页 > 其他分享 >Qt中文乱码的一种解决方法(ISO-8859-1和GBK编码互转)

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

时间:2025-01-07 16:34:17浏览次数:1  
标签:编码 Qt GBK 乱码 QTextCodec 8859 ISO 互转


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

问题定位:最终,经过大佬的尝试,发现是编码格式的问题。老项目中是将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,GBK,乱码,QTextCodec,8859,ISO,互转
From: https://www.cnblogs.com/wsry/p/18648135

相关文章

  • C++ Qt练习项目 QSpinBox和QDoubleSpinBos 未完待续
    个人学习笔记新建项目设计UI......
  • Qt 写无边框窗口时,遇到的问题与解决方法
    一、无边框窗口问题/需求汇总:1、窗口最大化时闪屏、卡顿问题。2、鼠标左键可移动窗口,但只在窗口上下左右30以内区域可移动,其它地方不可移动。3、双屏幕时,窗口最大、向下还原需要在当前屏幕显示,不回到主屏幕。4、窗口正常显示时在屏幕中间区域。5、窗口最大化显示......
  • Qt 状态机使用说明
    一、前言1、状态机,有限状态机,FiniteStateMachine,简写FSM。2、状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。3、简单说,状态机就是负责执行各种状态的切换。4、Qt状态机通过Qt......
  • Qt天气预报系统界面关闭
    Qt天气预报系统界面关闭1、点击右上角x退出1.1添加控件1.2修改控件名字1.3编程实现控件功能2、鼠标右键退出2.1重写鼠标点击事件2.2添加定义2.3添加一个菜单2.3.1创建一个菜单指针2.3.2创建一个菜单对象2.3.3显示菜单2.3.4定义一个菜单退出动作2.3.5在当前鼠标位置显示......
  • 使用MingW-w64 编译 64bit Qt5
    现在Qt官方提供的mingw编译器的预编译版本都是32bit的,如果想使用64bit的话需要自己手动进行编译。自己编译的话只需要下载mingw-w64编译器和Qt的源码,之前在官方Wiki上看到还需要Perl,实际测试发现没有Perl也可以正常编译。mingw-w64直接去mingw-w64官网下载就可以了,选择MingW-W64......
  • 遗留了很久的功能终于搞定/QTreeWidget自定义节点/添加删除修改分组
    一、前言说明这个功能看起来简单,实际上也确实简单,以前没搞的时候还以为很难,难点就是如何存储这个任意层级的树状列表信息,近期大环境经济很差,刚好有空把这个功能搞定,其实二维表格的方式存储这种任意层级树结构就可以,就是子节点需要指定父节点,父节点为空表示顶层节点,最开始还考虑搞......
  • 【PYQT】 一文掌握QlineEdit如何隐藏密码???
    @[toc]【PYQT】QlineEdit如何隐藏密码???【PYQT】QlineEdit如何隐藏密码???我们在设计登录页面的时候需要隐藏密码,不显示在QlineEdit中self.lineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)QLineEdit的介绍QLineEdit:Normal显示输入的字符,这是默认设置。QLineEd......
  • Qt打包为exe文件
    个人学习笔记选择release进入项目文件夹,查看releas生成的文件releas文件路径进入release看到exe文件,但是无法执行将exe文件单独放到一个文件夹内选择MinGW用CD 进入存放exe文件的路径,输入下面指令cdJ:\C++\Qt\test4-3-1windeployqttest4-3.exe运行还是......
  • YOLOv8多任务学习:界面+目标检测+语义分割+追踪+姿态识别(姿态估计)+界面DeepSort_ByteT
    YOLOv8-DeepSort/ByteTrack-PyQt-GUI:全面解决方案,涵盖目标检测、跟踪和人体姿态估计YOLOv8-DeepSort/ByteTrack-PyQt-GUI是一个多功能图形用户界面,旨在充分发挥YOLOv8在目标检测/跟踪和人体姿态估计/跟踪方面的能力,与图像、视频或实时摄像头流进行无缝集成。支持该应用的Py......
  • java对象与map之间互转操作的八种姿势
    Java将对象转为Map,可以采用的八种操作姿势,按顺序推荐选择,推荐前三势好用又方便。提示:如果Map转换对象失败或为空,取消对象的lombok方式,用set/get方法一势Fastjson操作转换Fastjson阿里巴巴的一个开源JSON库,性能极快,支持JSON与Collection、Map、JavaBean之间的转换,并且......