使用 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 格式的。)
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 格式的。)