delta_lt_0

emoji 与零宽连接符

在 mysql 中,utf8mb4 的表允许插入的单字符的 size 最多 4 字节。但是例如 🇨🇳 和 👩‍❤️‍👩 这种远超过 4 字节的字符也能够正常插入到 utf8mb4 的表中。这是因为这类型的 emoji 是 “组合式 emoji”,它是由若干个 emoji 加上连接符组成的,它自身并没有属于自己的 Unicode Code Point。

 

Emoji ZWJ Sequences

一般的 emoji 的字符是 3 个字节或 4 个字节, 像 👩‍❤️‍👩 这种看起来只有单个字符的 emoji 之所以它的 size 远超过 4 字节是因为它是由若干个 emoji 按顺序连接组成的,这种顺序叫做 emoji zwj sequences 。

 

零宽连接符

实际上,并不是把 👩 ❤️ 👩 这三个 emoji 并排在一起就能够自动组成一个 👩‍❤️‍👩 。这三个 emoji 之间是需要通过一个 zwj 字符来连接的,也就是 “ 👩 zwj ❤️ zwj 👩 ”。

那么什么是 zwj 呢?zwj 全称 zero width joiner,也就是 “零宽连接符”。因为这个字符是零宽度的,所以我们是看不见这个字符的。根据名字我们就可以知道,zwj 的作用就是用于字符与字符之间的连接。

zwj 的 unicode point 是 U+200D,我们可以在 PHP 中实现这个连接并打印出这个组合式 emoji:

 

同样,在 emoji 中还有非常多类似的组合式 emoji,比如:

 

ZWJ 与连体字

zwj 并不只是单纯地用于连接多个 emoji,它还能够组成连体字。比如马拉雅拉姆的字符  “ ണ്‍ ” 就是一个连体字,是由 “ണ + ് + zwj” 组成的。

 

同时,从这个连体字符中我们也可以看出, zwj 作为连接符,它是需要配合 “顺序” 使用的。它不一定是放在要连接的两个字符中间,也可能是放在最后。

 

posted on 2019-03-23 15:55  delta_lt_0  阅读(430)  评论(0)    收藏  举报

导航