为啥红色心形表情符号需要两个代码点,而其他彩色心形需要一个?

Posted

技术标签:

【中文标题】为啥红色心形表情符号需要两个代码点,而其他彩色心形需要一个?【英文标题】:Why does the red heart emoji require two code points, but the other colored hearts require one?为什么红色心形表情符号需要两个代码点,而其他彩色心形需要一个? 【发布时间】:2017-07-29 12:22:19 【问题描述】:

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

为什么红色如此不同?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

很确定其他颜色的心——好吧,大多数,即不是黑色表情符号的心——在第一轮表情符号中,但只有 2764定义为对现有符号的解释。 (嗯,至少避免套牌是真的。)【参考方案2】:

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

【讨论】:

注意:Zapf Dingbats(字体)≠ Dingbats(Unicode 部分)

以上是关于为啥红色心形表情符号需要两个代码点,而其他彩色心形需要一个?的主要内容,如果未能解决你的问题,请参考以下文章

c语言代码敲的爱心没有颜色

?打印心形符号时

csharp 用符号“o”打印心形图。

csharp 用符号“o”打印心形图。

CSS画心形的三种方法,超级简单

Android中的卡片套装图标