77

看起来红心表情符号 (❤️) "\u2764\uFE0F" 需要两个 Unicode 代码点,特别是Heavy Black Heart后跟一个Variation Selector。然而,蓝色绿色黄色紫色都有自己的单一代码点。

为什么红色如此不同?

4

2 回答 2

66

由于历史原因。最初,只有 U+2764 HEAVY BLACK HEART 支持 Emojis 的第一个应用程序决定将其渲染为红心。这些早期的应用程序总是将 U+2764 呈现为 Emoji。后来意识到这是一个坏主意,表情符号的变体选择器被标准化了。当添加额外的心形表情符号时,不需要另一个红色心形,因此将其省略。取而代之的是一个单独的黑心表情符号 U+1F5A4 。

理论上,应用程序可能需要将表情符号变体选择器也附加到其他心脏代码点。但是将像 PURPLE HEART 这样的字符渲染为非 Emoji 并没有多大意义。不过,它确实对 HEAVY BLACK HEART 产生了影响,它通常被渲染为原始的、普通的沉重的黑心角色。

于 2017-03-08T19:45:39.743 回答
35

HEAVY BLACK HEART 在表情符号之前的几十年被添加到 Unicode 中。当表情符号被合并到 Unicode 6 中时,一些已经存在的字符被简单地用作表情符号以避免不必要的重复。后来,为也映射到非表情符号字符集的字符定义了变体序列,以便更好地控制它们的显示方式。例如,U+2744 ❄ SNOWFLAKE 最初来自 Zapf Dingbats(我相信),但后来也被做成了表情符号。因此,如果您想强制使用原始文本样式显示,您可以使用 VARIATION SELECTOR-15(产生❄︎),如果您想强制使用更新的 emoji 样式显示,您可以使用 VARIATION SELECTOR-16(产生❄️)。

但是请注意,目前没有多少平台真正正确支持这些变体序列。此外,在使用表情符号键盘时,并非所有人都会自动应用变体选择器。理论上 ❤ 和 ❄ (以及许多其他表情符号)在没有 VS16 的情况下应该默认显示为文本样式,但许多应用程序也忽略了这一点。

如果您有兴趣,我在我的网站上有一个可以通过变体序列以不同方式显示的所有代码点的列表。六月的下一次 Unicode 更新将添加更多内容。

于 2017-03-09T19:09:54.280 回答