一、Emoji是什么?
它是一种在网页和聊天中使用的形意符号,被称为“绘文字”;最早由栗田穰崇创作,并在日本在无线通信中所使用;2007年,苹果公司发布的iOS 5输入法中加入了emoji后,这种表情符号开始在全球广泛使用。
二、Emoji 发展历史
早期的 Emoji 是将一些特定的符号组合替换成图片,这种方法很难标准化,能够表达的范围也有限。2010年10月发布的Unicode 6.0版首次收录绘文字编码,也就是说现在的 Emoji 符号就是一个文字,会被渲染成相应的形意符号。
由于 Emoji 符号使用越来越广泛,Emoji 的国际标准在 2015 年出台,目前已更新到 10.0 版本。
有的小伙伴可能会问,为什么每个系统显示图形不太一致呢?
这也就是说Unicode组织只是指定标准,比如说码点U+1F468表示男人表情,具体这个男人长成什么样,由各个系统来具体实现。因此,也有可能你的系统没有实现这个Emoji表情,那么你就只能看到一个没有内容的方框了。
目前来说,苹果系统、安卓系统、微信、Github、微博、Twitter、Facebook、Reddit等都有各自的Emoji实现。
三、Bug 起因
原因:由于Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节。
这里有两种修复方案:
- 过滤掉表情符号。
- 使用utf8mb4的mysql编码来容纳这些字符。
我一般在选取方案上,优先选择保证数据准确性的方案;因此,本文主要采用第二种处理办法。
四、容纳 Emoji 方案
1. Mysql处理方法
改配置文件/etc/my.cnf(window为my.ini):
说明:mysql支持utf8mb4的版本是5.5.3+,必须升级到较新版本。
查看版本:
执行数据库和表、字段的字符集sql:
重启Mysql:
检验是否修改好?
2. Java 服务端处理方法
先引入相关依赖,如下:
这里只需要一句代码就可以搞定,更多的使用方法请去github上面查看。
3.网页中如何使用?
这里利用的是twitter开源的表情库;更多使用方法请去官网查看。
五、结果展示
六、参考
https://en.wikipedia.org/wiki/Emoji
https://www.dnacademy.com/emoji-domains
http://twitter.github.io/twemoji/
https://github.com/vdurmont/emoji-java