我在Windows上开发了一个简单的qt应用程序,以测试qt中文UTF-8编码格式:
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();
}
,我的main.cpp文件编码格式是UTF-8,没有BOM,但是当我在Windows上运行该应用程序时,该应用程序的打印字符串是“鎴戞槸UTF8缂栫爜镄勬枃浠讹细”,我期望是“我是UTF8编码的文件:”,似乎字符串“我是UTF8编码的文件:”已转换为GB2312编码格式,因此显示了错误的字符串“鎴戞槸UTF8缂栫爜镄勬枃浠讹细”在运行时,字符串“我是UTF8编码的文件:”显示正确的字符串“我是UTF8编码的文件:”,当应用程序在macOS上运行时,我不知道为什么? 如何在Windows平台上正确显示字符串“我是UTF8编码的文件:”,非常感谢!
答案 0 :(得分:1)
在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。)