前言

好久没更新了,最近事比较多,或许下个月就会恢复到正常的发文频次。

这篇文章得从一个 emoji 表情开始,我之前开源的一个 IM 项目中有朋友提到希望可以支持 emoji 表情传输。

https://github.com/crossoverJie/cim/issues/12

正好那段时间有空,加上这功能看着也比较简单准备把它实现了。

但在真正实现时却发现没那么简单。


我首先尝试将一个 emoji 表情存入数据库看看:

果不其然的出错了,导致这个异常的原因是目前数据库所支持的编码中并不能存放 emoji,那 emoji 表情到底是个什么东西呢。

本质上来说计算机所存储的信息都是二进制 01emoji 也不例外,只要存储和读取(编解码)的方式一致那就可以准确的展示这个信息。

更多编解码的内容后文再介绍,这里先想想如何快速解决问题。

存储 emoji

虽说想要在 MySQL 中存储 emoji 的方式也有好几种,比如可以升级存储字符集到可以存放 emoji ,但这种需要 MySQL 的版本支持。

所以更保险的方式还是在应用层解决,比如我们是否可以将 emoji 当做字符串存储,只是显示的时候要格式化为一个 emoji 表情,这样对于所有的数据库版本都可兼容。

于是我们这里的需求是一个 emoji 表情转换为字符串,同时还得将这个字符串转换为 emoji。

为此我在 GitHub 上找到了一个库,它可以方便的将一个 emoji转换为字符串的别名,同时也支持将这个别名转换为 emoji

https://github.com/vdurmont/emoji-java

    @Test     public void emoji()