FifthDesign 2023-08-21 20:24 采纳率: 83.3%
浏览 185
已结题

QT中qDebug输出乱码

在QT中为什么cout正常、printf正常,就qDebug输出却是乱码?

QT版本:QT6.3.2


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    qDebug() << "你好";
    std::cout << "你好呀" << std::endl;
    w.show();
    return a.exec();
}

结果:

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-21 22:09
    关注

    【以下回答由 GPT 生成】

    问题标题:在QT中为什么qDebug输出乱码?

    问题标签: qt

    问题内容: 在使用QT的qDebug进行输出时,输出的内容出现乱码。以下是示例代码:

    #include <QApplication>
    #include <QDebug>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        qDebug() << "你好";
        std::cout << "你好呀" << std::endl;
        w.show();
        return a.exec();
    }
    

    结果: 乱码截图

    解决方案: 出现乱码的原因是qDebug在输出时使用的字符编码与终端或文本编辑器所使用的字符编码不一致。

    为了解决这个问题,有以下几种方法:

    方法1:转换字符编码 在使用qDebug输出之前,将输出文字转换为Qt支持的编码格式,并使用QString::fromXXX函数进行转换,其中XXX为输出文字的原字符编码。修改示例代码如下:

    #include <QApplication>
    #include <QDebug>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        qDebug() << QString::fromUtf8("你好"); // 使用fromUtf8转换为UTF-8编码
        std::cout << "你好呀" << std::endl;
        w.show();
        return a.exec();
    }
    

    方法2:设置终端字符编码 如果是在终端中运行程序并出现乱码,可以尝试修改终端的字符编码以匹配qDebug输出的字符编码。在终端中运行以下命令进行修改:

    export LANG="zh_CN.UTF-8"
    

    方法3:修改输出流编码 另一种解决方法是将qDebug输出的内容重定向至标准输出流,这样输出就可以和std::cout一样正常显示。修改示例代码如下:

    #include <QApplication>
    #include <QDebug>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        qInstallMessageHandler([](QtMsgType, const QMessageLogContext& context, const QString& msg) {
            std::cout << msg.toStdString() << std::endl;
        });
        qDebug() << "你好";
        std::cout << "你好呀" << std::endl;
        w.show();
        return a.exec();
    }
    

    这样修改后,qDebug的输出会被重定向到标准输出流std::cout,从而达到正常显示的效果。

    注意: 1. 方法1适用于在Qt应用程序中使用qDebug输出。 2. 方法2适用于在终端中运行程序时出现乱码的情况。 3. 方法3适用于希望将qDebug输出和std::cout输出一样正常显示的情况。

    希望以上解决方案能帮到你,如果还有其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月29日
  • 已采纳回答 8月21日
  • 创建了问题 8月21日