emoji
1.1、emoji简介

emoji表情是一种视觉上的速记符号,最初是在1999年由一个名叫栗田穣崇(Shigetaka Kurita)的日本人发明的。

emoji一词来源于日本语里的絵(e=图片)文(mo=写)字(ji=字符)。 栗田穣崇(Shigetaka Kurita)创造了这些符号,是为了能在消息对话中,相较于传统的纯文字或者简单的表情,提供出更丰富的感情色彩,让对话不至于被曲解。

emoji官网

emoji词典

1.2、emoji的标准化

2010年,Unicode开始筛选常用的emoji表情,加入到Unicode字符集中, 并给每个emoji表情分配一个Code Point

Unicode标准规定emoji字符的Code Point范围为U+1F601 ~ U+1F64F

版本发布时间
Emoji 1.02015/08
Emoji 2.02015/11
Emoji 3.02016/06
Emoji 4.02016/11
Emoji 5.02017/03

截止2017年4月,Unicode字符集中emoji字符共有2389个。

Unicode只是规定了emojiCode Point和含义,并没有规定它的样式。 比如:Code PointU+1F600emoji字符表示一张微笑的脸,但是这张脸长什么样,则由各个厂商自己实现。 因此,当我们输入一个emoji表情的时候,并不能保证所有用户看到的都是同一张脸。如果用户的系统没有实现这个emoji字符, 用户就会看到一个没有内容的方框,因为系统无法渲染这个字符。

目前,Android系统、iOS系统、GitHubTwitterFacebook等都有自己的emoji实现。

1.4、emoji组合

除了使用单个Code Point表示一个emoji字符外, 还允许多个Code Point组合在一起表示一个emoji字符。 如果组合呢?其中的一种方式是"零宽度连接符"(ZERO WIDTH JOINER,缩写 ZWJ)U+200D

举例来说,下面是三个emojiCode Point

U+1F468:男人
U+1F469:女人
U+1F467:女孩

上面三个Code Point使用U+200D连接起来,U+1F468 U+200D U+1F469 U+200D U+1F467, 就会显示为一个emoji表情:👨‍👩‍👧,表示他们组成的家庭。如果用户的系统不支持这种方法,就还是显示为三个独立的emoji表情: 👨👩👧

1.5、emoji字符在MySQL中的存储

由于Unicode标准规定emoji字符的Code Point范围为U+1F601 ~ U+1F64F, 它已经不在BMP范围内了。而我们平常使用的字符编码多以UTF-8为主,而UTF-8编码只实现了BMP, 也即是UTF-8编码支持的Code PointU+0000 ~ U+FFFF

一般来说,MySQL数据库的默认字符集都会配置成UTF-8,所以,如果要存储包含emoji的字符会报错。 为了解决这个问题,MySQL5.6版本开始支持4个字节的UTF-8编码方案, 以应对目前这种3个字节的UTF-8编码不能满足的情形。这4个字节的UTF-8编码方案被称为utf8mb4

参考

1.6、emoji在Android中
1.7、emoji在iOS中
1.8、emoji在浏览器中
1.9、参考

http://my.oschina.net/wingyiu/blog/153357

字符百科

http://www.iemoji.com

http://getemoji.com