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

标签 html ios unicode fonts emoji

下面(和这个 live demo here )是生成这两个屏幕截图的 HTML。第一个是在 Windows 10 上的 Chrome 中,第二个是在 iOS 12 上的 Chrome 中。

Win10 screenshot iOS12 screenshot

请注意,Win 10 正确地将底行中的所有字符变平并涂成红色。但在第一行,它错误地没有对⚠️进行风格化,即使在其他地方(也在 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>

最佳答案

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

数据文件中列出了所有允许变体选择器的表情符号 emoji-variation-sequences.txt ,我还策划了 a visual table在我的网站上以便于访问。

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

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

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

关于html - 我如何控制(跨所有设备和浏览器)字符是显示为表情符号版本还是文本版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57163979/

相关文章:

ios - 通用应用程序中的 UISplitViewController 在哪里?

ios - 协议(protocol)的 Swift 实例

ios - UISearchController 的 searchBar 没有填满整个宽度

python - 如何用python获取原始字符?

python - 如何使 python StreamWriter 需要 unicode 输入?

delphi - 有没有办法在 Delphi 2009 中查看字符是否使用 1 个或 2 个字节?

javascript - 过渡/动画后CSS触发javascript

html - Roboto 400 在视网膜 MacBook 上看起来比 700 更大胆

html - XHTML 到 XML XSLT 转换

javascript - 如何使用 jQuery 切换列表子列表子列表?