概览

○ emoji 是个形状图形,通常以彩色卡通方式展现,内容涵盖表情、天气、食物、动植物、交通建筑等多种类别。emoji 能内嵌在文字段落中,拓宽了文字表达的界限。
○ emoji 最早于 1999 年出现在日本移动电话中,“emoji”这个词源自日语:絵 (え ≅ picture) 文字 (もじ ≅ written character)。
○ emoji 的内部表示方式有以下两种。使用字体字形方式时与其他字符一样通过编码让字体去解析与展示,此时的 emoji 更确切得称为”emoji 字符”。
(1)内置图形<graphics>方式。每个 emoji 对应一个图像数据。
(2)字体字形<glyphs>方式。每个 emoji 对应一种编码。
○ 随着 emoji 在世界范围内的流行,不同平台厂商的 emoji 无法互通的问题涌现,使得统一 emoji 集合与字符编码的需求不断增加,Unicode 联盟于 2007 年通过了在 Unicode 字符集里扩展 emoji 字符的提案,2009 年发布的 Unicode 5.2 首次明确添加了第一批作为 emoji 字符的 Unicode 字符,之后不断有新批次的 emoji 字符随着 Unicode 的新版本被添加进去。
○ 从 2018 年的”Emoji 11.0”开始,emoji 字符集版本号与 Unicode Standard 使用相同版本号同步发布。

这个表格详细列出了每个版本分别新增了哪些 emoji。
○ 通常说的字符编码是字符在 Unicode 字符集内被分配的一个唯一的编码数值,这个数值称为代码点(code point)。代码点通常用 16 进制表示,如 emoji 笑脸的代码点是 U+1F600 。
○ 这个网站emojipedia可用于查看 emoji 表情的代码点组成。
○ emoji 字符涉及如下图中 6 个相关属性。

○ 上述相关属性,一个 emoji 字符可能同时有多个属性值为 Yes ,相应字符也有对应的名称,列举如下:
(1)emoji character。具有“Emoji”属性的字符,这类字符通常直接展示 emoji 内容。
(2)emoji presentation。具有“Emoji_Presentation”属性的字符,默认以多彩图形的 emoji 方式展示而不是文本方式。与此属性相关有两个变体选择器字符 VARIATION SELECTOR-15(U+FE0E) 和 VARIATION SELECTOR-16(U+FE0F) 分别用于显式指定前面字符的呈现方式为文本或多彩图形。两种展示方式的最大差别是:文本方式展示为单色且可由字体颜色控制变色,而多彩图形方式色彩多样且不受字体颜色控制。
(3)emoji modifier。具有“Emoji_Modifier”属性的字符,用于修改前面的 emoji 字符的外观或语义(如肤色、性别)。
(4)emoji modifier base。具有“Emoji_Modifier_Base”属性的字符,只有这些字符才支持被随后的 emoji modifier 修改。
(5)extended pictographic character。具有“Extended_Pictographic”属性的字符,该属性提供了字符分割的规则信息,确保emoji 序列 ↓这种被多个代码点组成的 emoji 表情能在分词时被正确分割。
(6)emoji component。具有“Emoji_Component”属性的字符,用于组成 emoji 序列,这类字符可能是 emoji character 也可能自身不独立展示 emoji 内容甚至只是个普通基础字符。例如键帽表情符号 1️⃣ 的序列组成是 U+31 和 U+FE0F 和 U+20E3,对照emoji-data可知三个字符都是 emoji component,而其中 U+31 对应的数字 1 是个基础字符。再如中国国旗 🇨🇳 的序列组成是 U+1F1E8 和 U+1F1F3,两个地区标志(Regional Indicator)字符同属于 emoji component 和 emoji character 和 emoji presentation。再如女科学家 👩‍🔬 的序列组成是 U+1F469 和 U+200D 和 U+1F52C,其中第一第三个字符同时是 emoji character 和 extended pictographic character,而第二个字符仅是 emoji component。
○ emoji 字符集版本号有三个特殊值:E0.0 和 E0.6 和 E0.7。其中 E0.0 包含了所有版本的 emoji 字符集里的 emoji component 和非 emoji character 字符。E0.6 和 E0.7 分别包含了当初添加到 Unicode 6.0 和 Unicode 7.0 的 emoji 字符,当时的 emoji 字符集没有自己的版本号。

显示外观

■ Unicode 字符集里定义的原始 emoji是下图这种黑白朴素样式(需将链接指向的 *.txt 文件下载到本地,再使用纯文本编辑器打开)。

■ 与其他 Unicode 字符一样,同一个 emoji 由于所用字体不同可以展示为不同的样式。emoji 的样式分为”text presentation”和”emoji presentation”两大类,这在前面 emoji 字符的 emoji presentation 属性部分有陈述。
■ 平时更经常看到的各种多彩图形样式是各平台厂商设计与提供的,从这里可以看到同一个 emoji 在不同平台厂商的外观。
■ 显示异常情况:当展示 emoji 的平台所支持 Unicode 版本低于某个 emoji 字符所在版本,这个字符将无法正常显示。

emoji 序列(emoji Sequences)

♂ emoji 标准中存在多种序列,这些序列由两个或多个字符组成,每个序列展示为一个新的单独的表情符。
♂ emoji 字符与变体选择器字符(见上文)组成的序列称为呈现序列(emoji presentation sequence)。
♂ emoji modifier base 与 emoji modifier 组成的序列称为修饰序列(emoji modifier sequence)。
♂ 由两个 regional indicator character 组成的序列称为旗帜序列(emoji flag sequence)。
♂ 由表情字符和标签字符组成的序列称为标签序列(emoji tag sequence)。可用于组成标签序列的字符在这里定义。
♂ 由[0-9#*]字符和键帽字符(U+FE0F 和 U+20E3)组成的序列称为键帽序列(emoji keycap sequence)。
♂ 通过 ZWJ 组合成的序列称为 ZWJ 序列。ZWJ 是 Zero Width Joiner(零宽连接器)的缩写。它是个特殊的 Unicode 不可见字符,编码为 U+200D。
♂ emoji ZWJ 序列就是通过 ZWJ 字符连接已有 emoji 字符形成的,用于表示一个合成的 emoji 字符。
♂ 举例:👩‍🔬(女科学家)是由女性符号(👩)和实验室设备符号(🔬)通过 ZWJ 连接而成。
这里列出了当前所有 emoji ZWJ 序列。
♂ 因此我们看到的一个 emoji 图像的背后可能包含了多个 Unicode 字符。
♂ emoji 序列的存在使得统计 emoji 数量变得不容易,近期字符集版本都提供了 emoji counts 表格,以15.0 版本的 emoji counts 表格为例,其从表情分类与实现结构两个维度做了数量统计,实现结构维度的术语解释在这里

肤色的实现

♀ 对于展示人物和身体部位的 emoji,最初计划是像笑脸那样使用一致的非现实肤色(黄色或橙色)。随着肤色需求的增加,2015 年发布的 Unicode Version 8.0 中增加了如下 5 个修饰字符(symbol modifier character)。

♀ 其中的样例颜色是基于名为 Fitzpatrick scale(菲茨帕特里克肤色分类法)的皮肤学标准制定的,而且提供了相应的灰度色用于适应黑白色环境。
♀ 这几个 modifier 字符可独立显示,此时展示内容是样例颜色方块。当放在特定的 emoji 字符之后时,则组成一个修饰序列(emoji modifier sequence),展示对应肤色的 emoji 内容。
♀ 常见支持换肤色的 emoji 种类有人物、身体部位、职业、运动,从字符属性上看是前面提到的 emoji modifier base 字符,标准规范中将它们统称为”human emoji”(非正式术语)。当 human emoji 后面没有 emoji modifier 时则展示与笑脸一样的非现实肤色。
♀ 实际应用中的带肤色 emoji 通常是直接选择的,而无需先选 human emoji 再选 emoji modifier。

分类与顺序

△ emoji 字符默认的分类和顺序定义在 Unicode 的CLDR中。CLDR(Common Locale Data Repository)是用于提供全球化和本地化数据的开放标准。
△ 分类和顺序详情提供在这里

名称与检索关键词

♥ 与其他 Unicode 字符一样,每个 emoji 字符都有个正式名称(formal Unicode name),这个名称是字符集内唯一的且不会随版本变更,即使随着发展最新含义与最初名称出现了偏差,比如 💃(U+1F483)的正式名称是 DANCER,现在的含义 woman dancing 是随着 🕺(man dancing)的加入而变化的。正式名称通常书写为全大写字母。
♥ 每个 emoji 字符有个 CLDR 短名称(CLDR short name),通过单词或短语描述 emoji 的含义或特征。CLDR 短名称会随着新版本做必要的变更。
♥ emoji 序列由于其实现原理是多个字符的组合,因此就只有 CLDR 短名称而没有正式名称。
♥ CLDR 短名称在 CLDR 中也被称为 TTS 名(text-to-speech name)。
♥ CLDR 是多语言的,内容维护在 GitHub 且提供了多种数据格式,如xmljson,短名称与检索关键词(keywords)位于其中的 “annotations” 文件夹,以语言名缩写作为子路径或文件名,如中文的 json 文件路径是:”cldr-json/cldr-annotations-full/annotations/zh/annotations.json”。
♥ CLDR 也提供了在线工具survey-tool,在页面左侧先选择语言再选择 Characters->分类就可以看到分类下各个 emoji 表情的短名称和搜索关键词了。

推荐项目

▲ GitHub 上的emoji-mart实现了 emoji 表情选择器,支持图片与 Unicode 字符两种方式,适合作为开发 emoji 表情相关内容的参考。

参考文献

Unicode® Technical Standard - Unicode Emoji