之前写android的,后来公司直接让我接手java后台,开始还担心完不成工期任务,硬着头皮直接上。。。。后来发现也就那样,爱情不变人在换。。。
记录下工作中遇到的小麻烦,首先就是用户登录或者创建昵称之类,用户会使用各式各样的表情,看着好看,给后台会造成各种乱码。开始也是查,网上大部分都是讲解设置数据库/表/列的编码为utf8mb4。看来遇到这类问题的不少,就按照这个设置了,并写了bloglmysql 插入数据时,出现”\xF0\x9F\x8F\x80”这种情况的处理! 后来发现还是有问题,这尼玛不是坑么。
公司先做的app是H5版的,所以入口是通过微信进去的,设置昵称为表情的时候,只有少部分表情在Android手机上是支持的,大部分在不同手机上显示不一样的效果,有?,有繁体字的乱码之类的。。。但是在iPhone手机上是没有问题的。原来Iphone使用的浏览器内核是支持utf16的,google在Android 6.0之后的chrome 内核上也支持了,但是微信使用的是自己改编的盗版chrome内核。兼容性不好,微信自己也对特殊表情做了限制,不再是随心所欲的设置昵称了。
废话这么多,下面来说说我的解决之法:
我在男性交友网站上找到了emoji-java 的库。这个库有自己的一张映射表,将表情和字符串做了关联,支持不少,但是更新太慢了,现在Emoji表情应该在2300+,他仅支持1000左右,最近更新在7个月前,这个注意了
这个库的有点是:使用起来非常方便。
java导入
Maven:
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>3.2.0</version>
</dependency>
或者 Gradle导入
compile 'com.vdurmont:emoji-java:3.2.0'
之后直接调用就行了
将表情转码
String str = "An 【表情1】awesome【表情2】string 【表情3】with a few 【表情4】emojis!";
String result = EmojiParser.parseToAliases(str);
System.out.println(result);
// Prints:
// "An :grinning:awesome :smiley:string with a few :wink:emojis!"
将转码后的数据解码为带表情的字符串
String str = "An :grinning:awesome :smiley:string 😄with a few :wink:emojis!";
String result = EmojiParser.parseToUnicode(str);
System.out.println(result);
// Prints:
// "An 【表情1】awesome【表情2】string 【表情3】with a few 【表情4】emojis!"
表情是乱码,所以直接上文字了。
还有其他方法,大家可以看原文章,就不赘述了。
这个库的缺点就是,表情很少,更新慢,有时间将映射表完善上传上去。但是优点就是方便仅仅后台转码解码就解决问题了。
有的不满足于此。可以看看另一个文章EmojiCss 这个方法需要前端后台配合使用。相对来说更新快,表情全。