Emoji bug of Ciji
前几天,Dawncold 捉到一个词记的 bug:
是下暴雨的那天,输入的是下雨的 emoji 表情:☔️。
试了一下,在 TextField 编辑状态还是正常的,退出编辑状态后就成这样子了。另外,除了这个下雨的表情外,还有几个经典的 emoji 也显示成了黑白颜色的,但好在还是一个字符,没有出现后面的 VS16。基本可以锁定是字体的原因。
先查看了下雨的编码,在表情与符号里拷贝字符简介:
粘贴出来可以看到这个 emoji 编码是 U+2614 U+FE0F:
|
|
为了营造回忆的气氛,词记选用了花园明朝体,打开 ttf 文件后查看 U+2614 和 U+FE0F 位置的字符:
果然没错,就是字体里面覆盖了一部分的 emoji 表情导致的,还能找到其他一些 emoji 表情:
可能是花园明朝体在开始制作的时候,主流操作系统对 emoji 表情的支持还不到位,所以在字体文件里加入了一些 emoji 符号。当你输入这些表情时,因为字体里有这些符号,所以会显示字体里面的符号,而不会显示系统默认的彩色 emoji 字体。
但是,下雨表情里后面那个 VS16 是什么鬼?为什么这个下雨表情,由两个 Unicode 组成?
表示下雨的字符就是前面的 U+2614,而后面的 VS16 表示第 16 号字形变体(Variation Selector)。用 iOS 的表情键盘输入的下雨表情,默认就是第 16 号变体,在苹果的 emoji 字体里,就是一把蓝色的雨伞,上面五个雨滴。一个表情允许有多种不同的展示形式,比如苹果系统中有关人物的 emoji 表情都可以选择不同的肤色,就是采用了这种字形变体的方式。
于是这个 bug 就容易解决了,删掉所有的表情就好了,这样就会用系统的 emoji 字体进行显示。
另外,在浏览这个 ttf 文件时,发现了 Unicode 标准中很多有意思的符号,比如:
各种奇怪的性别:
还专门定义了各种单位:
音乐符号:
回收标记:
镰刀和锄头:
麻将牌:
扑克牌: