Windows下QString转QML字符串时·符号显示为问号的问题
解决QML中C++返回含·符号字符串在Windows显示为问号的问题
问题分析
Windows下出现该问题的核心是编码解析不一致:
- QML文件默认以UTF-8编码处理字符串,直接定义的
"1 · 2"能被正确识别; - Windows平台编译器(如MSVC)若遇到无BOM的UTF-8源文件,会将字符串字面量按系统默认编码(如GBK)解析,导致·被转换成错误字符,最终QString传递到QML后显示为问号。
解决方案
1. 显式指定UTF-8构造QString
在C++代码中,通过fromUtf8方法强制按UTF-8解析字符串字面量,避免编译器自动编码转换:
Q_INVOKABLE QString fixedStr() { return QString::fromUtf8("1 · 2"); }
2. 确保C++源文件编码为UTF-8带BOM
修改源文件编码设置,让编译器正确识别UTF-8字符:
- VS环境:右键文件→属性→高级→编码,选择「UTF-8 带签名」;
- Qt Creator环境:工具→选项→文本编辑器→行为,将默认编码设为「UTF-8(BOM)」。
3. 从资源文件加载字符串(推荐用于多语言/长文本场景)
把字符串存入Qt资源文件,通过资源路径读取,彻底规避源文件编码问题:
- 创建
.qrc资源文件,添加编码为UTF-8的文本文件(如strings.txt,内容为1 · 2); - C++中读取资源内容:
Q_INVOKABLE QString fixedStrFromRes() { QFile file(":/strings.txt"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { return QString::fromUtf8(file.readAll()); } return ""; }
内容的提问来源于stack exchange,提问作者RomaFUN
相关产品推荐
相关产品推荐

