我如何控制(跨所有设备和浏览器)字符是显示为表情符号版本还是文本版本?

How can I control (across all devices and browsers) whether a character is displayed as the emoji version or text version?

下方(以及此 live demo here)是生成这 2 个屏幕截图的 HTML。第一个是 Chrome Windows 10,第二个是 Chrome iOS 12。

请注意,Win 10 正确地将底行中的所有字符变平并涂成红色。但是在第一行,它错误地 not 样式化了 ⚠️,即使在其他地方(也在 Win 10 上)我看到它正确显示为黄色,例如 here

另请注意,iOS 12 正确设置了所有表情符号的样式,但 将前 2 个字符 (︎ ︎) 变平并涂成红色。

我如何控制(跨所有设备和浏览器)字符是显示为表情符号版本还是文本版本?

这不是其他问题的重复,因为(正如您从 HTML 中看到的那样)我已经知道文本变体选择器 ︎,并且我已经尝试了很多不同的本地字体(例如 https://emojisymbols.com)和 Google 字体。

<link href="https://fonts.googleapis.com/css?family=Raleway&display=swap" rel="stylesheet">
<div style='text-align: right; font-family: "Raleway"; margin: auto; display: inline-block; font-size: 22px;'>
    emojis &#127748;
    &#x1F4AC;                    
    &#x231b;        
    &#9889;
    &#9888;
    <div style="color: red;">
        using text variation selector 
        &#127748;&#xfe0e;
        &#x1F4AC;&#xfe0e;
        &#x231b;&#xfe0e;        
        &#9889;&#xfe0e;
        &#9888;&#xfe0e;
    </div>
</div>

简短的回答是你不能。文本变体选择器通常不适用于所有字符;只有那些在标准中明确定义的序列才有效。 Chrome on Windows 实际上违反了第一个示例中的标准,因为 和 没有变化序列。没有 Unicode 机制来阻止这些字符表现得像表情符号; <U+1F304, U+FE0E> 必须U+1F304 单独显示相同。

所有允许变体选择器的表情符号字符都列在我网站上的数据文件 emoji-variation-sequences.txt, and I also curate a visual table 中,以便于访问。

然而,即使对于那些支持变体选择器的字符,也不能保证它们真的有效。例如,较旧的 Android 手机无法将许多表情符号显示为 text-style,因为它们只是缺少这样做所需的字体。

如果要确保通用 text-style 显示,您将需要提供自己的字体来覆盖系统默认值。

旁注:虽然您的 Windows 示例将变体选择器弄错了,但它实际上 确实 正确处理了 ⚠,因为该字符本应 text-style默认不同于所有其他的。如果您需要 emoji-style 显示,您必须像这样附加表情符号变体选择器 U+FE0F:⚠️。对于 ⌛ 和 ⚡ 这不是必需的(但可能),因为它们是 emoji-default.