Qt Debug模式下应用程序输出界面乱码【已解决】

发布于:2024-04-24 ⋅ 阅读:(26) ⋅ 点赞:(0)

Qt Debug模式下应用程序输出乱码

一、问题描述

源码为utf-8编码.

  • Qt Creator在Debug模式下运行程序,下方应用程序输出界面显示乱码. 但正常运行无乱码:
    在这里插入图片描述

二、解决方法

尝试修改文件编码、执行编码无果…

可参考 Qt Debug模式中文乱码:https://blog.csdn.net/waooi/article/details/134577285
语言->管理语言设置->更改系统区域设置->beta版UTF-8

我使用以上方法无效,应用程序输出依旧为乱码。但是设置为run in terminal可以正常输出中文…
具体步骤如下所示 (Win10系统):

    1. 打开控制面板,查看方式选择类别,然后点击更改如期、时间或数字格式
      在这里插入图片描述
    1. 在弹出的界面中左上角选择管理,然后点击更改系统区域设置
      在这里插入图片描述
    1. 勾选如下图所示,点击确定即可 (需重新启动才能生效):
      在这里插入图片描述
    1. 重启后应用程序输出界面依旧乱码(此窗口可能不是用的windows环境),故直接调用windows小黑框(确定windos环境是utf-8.. 这样准没错了…)
      在这里插入图片描述

三、相关测试

牵扯到了三种编码,utf-8GBKiso88591… 怀疑是windows下debug时候gdb的问题…

    1. 直接运行与Debug运行结果对比
      在这里插入图片描述
    1. 修改上述解决方案,run in terminal勾选与否的对比
      在这里插入图片描述
      在这里插入图片描述
    1. 测试代码
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <QTextCodec>

QString iso88591ToGbk(const QString &iso88591String) {
    // 获取 ISO-8859-1 和 GBK 的编解码器
    QTextCodec *codecIso88591 = QTextCodec::codecForName("ISO-8859-1");
    QTextCodec *codecGbk = QTextCodec::codecForName("GBK");

    if (!codecIso88591 || !codecGbk) {
        // 编解码器未找到,处理错误
        return QString();
    }

    // 将 ISO-8859-1 字符串解码为 Unicode
    QByteArray unicodeBytes = codecIso88591->fromUnicode(iso88591String);

    // 将 Unicode 编码为 GBK
    QString gbkString = codecGbk->toUnicode(unicodeBytes);

    return gbkString;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString cs = "中文";

    qDebug()<<QString::fromUtf8("中文");
    qDebug()<<iso88591ToGbk("ÖÐÎÄ");
    qDebug()<<cs;
    //return a.exec();
}

    1. 参考链接

Qt开发中文显示乱码(源码、执行、运行环境):https://blog.csdn.net/QtCompany/article/details/130565849
Qt报错 converting to execution character set:illegal byte sequence:https://blog.csdn.net/WHEgqing/article/details/129792285
编码格式检测(中文乱码问题):https://blog.csdn.net/qq935667108/article/details/124823074
将中文通过ISO-8859-1方式编码传输:https://www.cnblogs.com/blanset/p/16910177.html