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) 收藏 举报
浙公网安备 33010602011771号