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

看来,红色的心脏表情符号(❤️)“\ uFEIF”需要两个unicode代码点,特别是沉重的黑色心脏,后面跟着一个变化select器 。 然而, 蓝💙 , 绿💚 , 黄💛和紫💜都有自己的单个码点。

为什么红色如此不同?

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

理论上,应用程序可能会要求将Emoji变体select器附加到其他的心脏代码点。 但是把“紫色之心”这样的angular色描绘成非表情符号是没有什么意义的。 这对于黑色重心确实有所帮助,但是,它通常被devise成原始的,简单的黑色的重心。

在表情符号之前,HEAVY BLACK HEART被添加到Unicode数十年。 当表情符号被纳入Unicode 6时,一些已经存在的字符被简单地重新用作表情符号来避免不必要的重复。 之后,还为映射到非表情符号字符集的字符定义了变体序列,以便更好地控制其显示方式。 例如,U + 2744❄SNOWFLAKE最初来自Zapf Dingbats(我相信),后来也做了一个表情符号。 所以,如果你想强制原始的文字风格的显示,你可以使用VARIATION SELECTOR-15(导致❄︎),如果你想强制更新的表情符号式显示,你可以使用VARIATION SELECTOR-16(导致❄️ )。

但是请注意,目前没有多less平台能够正确支持这些变化序列。 当使用表情符号键盘时,并不是所有的人都会自动应用变化select器。 理论上❤和❄(以及许多其他表情符号 )应该默认显示为文本样式,而不是VS16,但许多应用程序也忽略了这一点。

如果您有兴趣,我可以在我的网站上列出所有代码点的列表,这些代码点可以通过变体顺序进行不同的显示 。 六月份的下一个Unicode更新将会增加更多。