使用 UTF-8 编码格式时,qt 应用程序在 windows 上以乱码显示中文

the qt app shows Chinese in messy code on windows when using UTF-8 encoding-format

I developed a simple qt app on windows to test the qt Chinese UTF-8 encoding-format:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QString strMessage = QString::fromLocal8Bit("我是UTF8编码的文件:");
    qDebug() << strMessage;
    return a.exec();
}

and my main.cpp file encoding format is UTF-8 without BOM, but when I 运行 the app on windows, the app print string is "鎴戞槸UTF8缂栫爜镄勬枃浠讹细" which I expect is "我是UTF8编码的文件:",it seems the string "我是UTF8编码的文件:" is converted to GB2312 encoding-format so shows the wrong string "鎴戞槸UTF8缂栫爜镄勬枃浠讹细" in 运行time,and the string "我是UTF8编码的文件:" shows right string "我是UTF8编码的文件:'' when the app 运行s on macos, I don't know why? how to let the string "我是UTF8编码的文件:" show right on windows platform, thanks a lot!

在 Windows 上,打印 UTF-8 到控制台不是自动的。您需要先在控制台执行此命令以更改代码页 65001(即 UTF-8 Windows 代码页):

chcp 65001

您还需要设置一个提供汉字的字体。在 Windows 10 上,这是 "NSimSun" 字体。但是,Windows 控制台有一个巧妙的功能,如果您设置中文代码页(如 936),它会自动切换字体。因此,您实际上可以使用标准库 system() 函数以编程方式 运行 这些命令。 chcp 命令会产生输出。要隐藏它,将输出重定向到 nul.

#include <cstdlib>

// ...

int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN
    // Temporary codepage change so we get an automatic font change.
    system("chcp 936 > nul");
    // Change to UTF-8.
    system("chcp 65001 > nul");
#endif

    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QString strMessage = QString::fromUtf8("我是UTF8编码的文件:");
    qDebug() << strMessage;
    return a.exec();
}

(作为旁注,您应该使用 QString::fromUtf8(),因为您知道文本是 UTF-8 格式的。)