为什么红心表情符号需要两个代码点,但其他颜色的心脏需要一个?

时间:2017-03-08 19:00:08

标签: unicode emoji codepoint

看来红心表情符号(❤️)" \ u2764 \ uFE0F"需要两个Unicode代码点,特别是Heavy Black Heart后跟Variation Selector。但是,blue green yellow purple 都有自己的单一代码点。

为什么红色如此不同?

2 个答案:

答案 0 :(得分:60)

由于历史原因。最初,只有U + 2764 HEAVY BLACK HEART,支持Emojis的第一批应用程序决定渲染为红心。这些早期应用程序总是将U + 2764渲染为表情符号。后来人们意识到这是一个坏主意,Emojis的变异选择器是标准化的。当添加额外的心脏表情符号时,不需要另一颗红心,因此省略了它。相反,它是一个单独的黑心表情符号U + 1F5A4。

理论上,应用程序可能要求表情符号变异选择器也附加到其他心脏代码点。但是将像PURPLE HEART这样的角色渲染为非表情符号并没有多大意义。然而,它确实对重型黑心有所不同,它常常被渲染为原始的,沉重的黑色心脏角色。

答案 1 :(得分:28)

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

但请注意,目前并没有多少平台能够正确支持这些变体序列。使用表情符号键盘时,并非所有这些都会自动应用变体选择器。理论上,❤和❄(以及many other emoji)默认情况下应显示为文本样式而不使用VS16,但许多应用程序也会忽略它。

I have a list of all code points that can display differently via a variation sequence, on my website, if you're interested。 6月的下一次Unicode更新将增加更多。