Qt应用程序显示表情符号而非Unicode字符

3
我目前在使用Qt开发一个应用程序。我的开发和测试环境是macOS Sierra,但该应用程序是跨平台的。
问题在于:我正在创建一个Qt Quick Text项,在其中设置了以下属性text: "\u2139",以显示信息图标。我使用的字体系列是Open Sans
运行应用程序后,我惊讶地看到我的Unicode字符应出现的位置上出现了以下内容:

emoji information symbol

这不是我想要的,我想要那个Unicode字符的文本呈现,而不是表情符号呈现。我该如何强制显示文本呈现(在所有平台上)?

谢谢。


我认为你对Unicode表情符号的理解存在误解。表情符号就是一种文本字符,与其他字符一样需要使用字体进行渲染。因此,你已经得到了你所要求的东西。但是,由于不同操作系统可能对表情符号有不同的字体策略,所以在你的Qt程序中更改字体可能会对结果产生影响,你可能需要调整系统设置。 - Benjamin T
那么你认为这是一个特定于字体的问题? - gleerman
是的。\u2139 是使用字体呈现的。请参见 http://apple.stackexchange.com/questions/214401/where-are-emojis-stored-on-macs。 - Benjamin T
有没有办法在我的应用程序中排除使用那种字体? - gleerman
无论您选择什么字体,macOS都会将Unicode字符转换为表情符号。我也希望得到一个真正的答案。 - c z
2个回答

1
根据维基百科的说法,您应该在该字符后面添加U+EF0E {VARIATION SELECTOR 15},以请求呈现系统以文本(单色)形式呈现前一个字形;相反地,如果要请求Emoji(彩色)表示,则应改为使用 U+EF0F {VARIATION SELECTOR 16} 代码点。特别是对于后者,在哪些系统/显示小部件中可以获得彩色形式高度取决于其选择性,并且如果未指定,则不明显哪些代码点呈现哪种方式。例如这三个字形:

︎️没有变量选择器
︎︎︎️︎每个后面跟着VS15
️︎️️️每个后面跟着VS16

啊呀!它们在Stack Exchange上完全无法以不同的方式显示出来咕噜咕噜!

但是,将其保存为带有HTML实体的HTML文件并在浏览器中打开:

<html><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><head/>
<body><p>&#128528;&#128542;&#128512; without a variation selector</p>
<p>&#128528;&#65038;&#128542;&#65038;&#128512;&#65038; each followed by VS15</p>
<p>&#128528;&#65039;&#128542;&#65039;&#128512;&#65039; each followed by VS16</p>
</body></html>

只有在被告知时,它才会产生 Emoji 效果:

Partial screen shot of above HTML display in my Browser

根据我最近使用Qt C++小部件的项目经验,大多数(我尝试过的所有)小部件似乎都无法处理Emoji表情 - 尽管我没有尝试QTextBrowser,这似乎是最有可能处理它们的 - 它只是不适用于我正在做的内容...
此外,102个类人表情的Emoji形式还可以与另外五个U+1F3FB到U+1F3FF {EMOJI MODIFIER FITZPATRICK TYPE-xxxx}(第一个是类型1和2,其余分别为3至6)结合使用,这些表情给它们带来了逼真且越来越深色的肤色。请注意,基准人类表情的默认黄/蓝/灰色基础颜色明确不像人类皮肤色调!

0
指定font-family: Helvetica, Arial;会覆盖操作系统的默认表情符号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接