【发布时间】:2017-03-12 03:33:50
【问题描述】:
我在一个 UTF-8 编码(Qt 5.7,GCC)的 C++ 源文件中执行以下操作:
QTextStream textStream(&file);
textStream.setCodec("UTF-8");
textStream << "Copyright ©" << endl;
生成的文件采用 UTF-8 编码,但 © 字符编码不正确。
这会失败,因为 operator<<(const char *string) 需要一个 Latin-1 字符串文字。由于源是 UTF-8,这不起作用。
我也知道如何解决这个问题:
QTextStream textStream(&file);
textStream.setCodec("UTF-8");
textStream << QString("Copyright ©") << endl;
这是可行的,因为 QString(const char *str) 需要一个 UTF-8 字符串文字。
我需要以这种方式输出大量文字字符串。我无法将它们全部包装到QString() 中。
我的问题:
1) 为什么QString 采用UTF-8 而QTextStream 却没有?考虑到 Qt 源代码必须是 UTF-8,这是否有意义?
2) 有没有办法在没有数百个 QString() 包装器(或类似的)的情况下解决这个问题?
【问题讨论】:
-
似乎这是一个可能会在 Qt 6 中修复的错误(请参阅 code.qt.io/cgit/qt/qtbase.git/…)
-
你试过把它包装在QStringLiteral宏中吗?
-
@MrEricSir:是的,StringLiteral 似乎也可以工作。但主要问题(每个单字符串都需要包装)仍然存在。
标签: c++ string qt encoding utf-8