blog5开发,关于emoji表情


发表于 2017-12-21 10:56


上一次涉及到emoji是由于一个异常:

Incorrect string value: '\xF0\x9F\x98\x80' 

搜索之后才发现原来mysql的utf8字符是无法存储emoji表情的,因为emoji是4个字节,好在mysql 5.5.3之后支持utf8mb4,可以存储4个字符,因此可以完美的存储emoji表情,具体可以到 emoji 来测试。

本来也想考虑不修改数据库,而是采用程序过滤的方法,但看了一圈下来,并没有理想的解决方案,用的比较多的应该是emoji-java这个jar包,看了下它的过滤方法,它还是依赖于内部的一个json文件,该文件存储了大量的emoji表情(并非所有),所以在测试的过程中发现,从 getemoji New Emojis中获取的emoji表情,无法被正确的过滤,例如:🤩 🤨(可能看到的是口口,因为这跟浏览器(?)对emoji的支持有关)

另外网上还有各种通过判断字符范围的方法,看了一圈下来,发现这个emoji表情特殊字符出错处理可以参考下,但我不知道,这类方法是不是在过滤掉emoji的同时,将其他的字符也一并处理掉了,毕竟这个很难去判断。

所以对于处理emoji,如果是mysql数据库的,还是直接升级到utf8mb4编码,一劳永逸,或者就像emoji-java做的那样,本地存有一个emoji的映射文件,然后定时去更新它,那些通过字符范围来判断的,感觉不是很可靠。


搜索