我开始在 Qt 中编写一个非常基本的文本操作应用程序,没有 GUI。我的文本包含特殊字符,但不知何故,无论我做什么,我都无法打印这些特殊字符。然后我注意到,在添加了一个QCoreApplication
实例(我之前删除了它,因为我认为我不需要它)之后,一切都正常工作了。
这是代码:
#include <QCoreApplication>
#include <QString>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString s(QString::fromUtf8("aä\xc3\xa4")); // aää
qDebug() << s;
qDebug() << s.toAscii();
qDebug() << s.toLatin1();
qDebug() << s.toUtf8();
qDebug() << s.toLocal8Bit();
qDebug("%s", qPrintable(s));
qDebug("%i", s.length());
qDebug("%i", strlen(qPrintable(s)));
return 0;
}
输出QCoreApplication
(一切正常):
"aää"
"aää"
"aää"
"aää"
"aää"
aää
3
5
注释掉QCoreApplication
定义的行后的输出(不再显示特殊字符):
"a"
"a"
"a"
"a"
"a"
a
3
1
请注意,在调用之后qPrintabable(s)
,特殊字符已经被删除。我对此进行了测试以确保,这QDebug
不是问题。
我还检查了文件是否真的以 UTF-8 编码。
为什么QCoreApplication
在实例化 no 时 QString 不能正确处理特殊字符?