目录
2024.05.15 更新,补充qPrintable()说明
1. 问题现象
使用qDebug输出打印到调试窗口(minGW/Windows/x64),打印QString,包含中文
直接运行程序时,打印正常
而当进入调试时,打印乱码
代码很简单,明确中文都使用utf-8编码
void WigetTestStdDlg::on_btnFileDlg_clicked()
{
QString qstrFileName = u8"测试";
qDebug() << qstrFileName << Qt::endl;
}
2. 问题原因
Debug模式下,Qt应该是用了windows的本地编码模式输出,无法直接输出utf-8,导致的混乱
这问题从早期的Qt版本到现在一直存在,个人觉得是QtCreator的Bug吧
3. 解决方案
修改windows语言设置
设置 --> 时间和语言 --> 管理语言设置
管理 --> 更改系统区域设置 --> 勾选 Beta版,使用utf-8 --> 点击确定
4. 补充说明
Qt对于qDebug的说明如下
Note: qDebug(), qInfo(), qWarning(), qCritical(), qFatal() expect %s arguments to be UTF-8 encoded, while qPrintable() converts to local 8-bit encoding. Therefore qUtf8Printable() should be used for logging strings instead of qPrintable().
即打印是按照utf-8打印,实际windows应该是按照local 8-bit,因此可以在需要打印的字符串增加qPrintable,来使打印正确。
但是不推荐了,因为国际化会很难受,最好还是用utf-8吧。