emoji表情处理

今天做一个app端提交论坛帖子的时候用户提交了android自带的emoji表情导致数据库一直不通过,很头疼的问题,虽然我也喜欢发表情-。-但是这个代码中遇到表情需要处理的时候,真就呵呵呵呵了~~

通过查看日志可以看出来:

Incorrect string value: '\xF0\x9F\x91\x8D\xE6\x94...' for column 'context' at row 2599

在查阅资料后发现这其实是一种emoji表情符号,普遍存在iOS与android系统中,而这种特殊字符合作用的Unicode 6标准来统一,采用4个bytes来存储一个emoji表情,而将这种表情不处理直接存储到MySQL5.5以下的版本会报错~~

那么问题来了:这么可爱的表情你是要存呢,还是要存呢,还是要.....有几种解决方式吧,看自己的项目中的需求了。

如果你需要将这种存到数据库的话:

1)确保你的数据库(我用的mysql,其他的没试验,不敢乱说)版本5.5以上

2)然后将存数该表情的字段的字符集设置成utf8mb4

3)将该表的字符集设置成utf8mb4

4)最后将该表所在的数据库的字符集设置成utf8mb4

重启mysql。binggo

但是这种处理方式带来的问题是数据传回客户端或者网页的时候需要做兼容处理。麻烦!

 

第二种,如果你可以暂时忽略他的时候,那就简单了,解决代码贴出来:

Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);

Matcher emojiMatcher = emoji.matcher(req.getContent());

if(emojiMatcher.find()){
System.out.println("我是emoji表情,可以忽略");
}



不要问我emoji表情的unicode怎么来的,因为我也是google的-。-

posted on 2016-03-17 18:22  hellohero  阅读(1370)  评论(0)    收藏  举报

导航