c++ - 为什么QStringLiteral返回乱码字符串

标签 c++ qt unicode

我正在编写一个中文软件,并在源文件中嵌入了一些字符串。为了减少运行时开销(好吧,实际上这是过早的优化,因为速度差异可以忽略不计,但尽管如此,我很好奇),当我使用 QStringLiteral 和中文字符时,例如

QString s = QStringLiteral("中文");

字符串显示为乱码;但如果我只是使用

QString s = "中文";

它工作正常。但是后者在运行时而不是编译时构造字符串,所以速度稍慢。谁能告诉我如何解决这个问题?

我的源文件编码是没有BOM的UTF8;编译器是带有 SP1 的 MSVC 2010 Express。我也试过了

#pragma execution_character_set("utf-8")

没用。

最佳答案

好的,我自己解决了。我需要用字节顺序标记保存文件,然后 MSVC 正确识别它是用 UTF-8 编码的,一切正常。


更新:在较新的 MSVC 上,我们可以设置编译器选项 /utf-8 而不必理会 BOM。

关于c++ - 为什么QStringLiteral返回乱码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305492/

相关文章:

Visual Studio 2015 中的 C++ : Manually pass in command line args

c++ - 将 XOR 加密代码移植到 PHP

c++ - 如何检测来自不同类的 QGraphicsItem 和 QGraphicsPixmapItem 图像之间的冲突

qt - QML 仅在可用时导入更高版本的模块?

qt - 如何在QML中声明列表属性

html - 这段文字怎么能跑出屏幕?

html - URL 中的 Unicode 字符(都可以 - 除了 IE)

c++ - const 对象的复制构造函数

php - MySQL 搜索非 ascii 字符无法按 LIKE 预期工作

c++ - std::codecvt 和 std::codecvt_utf8 有什么区别