如何在QML中输入Unicode编码超过10000的字符?
问题原因
QML 中的\u转义语法仅支持4位十六进制数,只能覆盖U+0000到U+FFFF范围内的基本多语言平面字符。你要输入的U+1F300属于辅助平面字符,码点超过了FFFF的上限,\u1F300会被QML解析为\u1F30和单独的字符0,因此无法正常显示。
解决方法
- 方法1:使用8位的
\U转义语法(Qt 5.2及以上版本支持)
码点不足8位的部分在前面补0,U+1F300对应写法为\U0001F300,示例代码如下:ToolButton { id: toolButton text: "\U0001F300" } - 方法2:拆分UTF-16代理对(适配低版本Qt)
辅助平面字符可以拆分为两个连续的UTF-16代理单元,U+1F300对应的代理对为U+D83C和U+DF00,写法如下:text: "\uD83C\uDF00" - 方法3:直接插入字符
只要你的QML文件保存为UTF-8编码(Qt Creator默认配置),可以直接将目标字符复制粘贴到字符串中,写法更直观:text: "🌀"
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

