表情mysql编码方式_emoji表情在Mysql数据库中乱码问题总结

最近在爬取微博数据中发现有些数据保存失败,调试后发现都是emoji表情保存到数据库后乱码造成的。我的Mysql编码都是utf8,Emoji表情占用4个字节,但是MySQL数据库UTF-8编码最多只能存储3个字节,所以乱码了。下面我总结一下我知道的处理方式:

1.保存前使用emoji的官方jar包提供的方法将表情转成代码,再保存

2.设置数据库的字符编码为支持emoji表情的字符集:utf8mb4

3.如果可以,我说如果可以。。。过滤掉吧

一、emoji表情转成代码保存例如: 😁 我可以存储为:smile:,😭存储为:cry:,等等,可以这样映射起来。

这种方法要使用jar包提供的方法,

引入jar包

com.vdurmont

emoji-java

3.2.0

然后调用api转换

EmojiParser.parseToAliases(string); //将表情符号转为字符

EmojiParser.parseToUnicode(string); //将字符转为表情符号这种做法的好处是不用修改数据库编码,重启数据库和避免了修改编码后造成其他乱码的问题,缺点也很明显,需要对数据保存前和显示都要进行转换

参考:https://www.jianshu.com/p/bda2d030b0ce

二、修改数据库编码为utf8mb4

三、如果可以,过滤掉吧因为某种原因不想存,我们可以通过java代码来过滤掉他们,代码如下:

public String replaceEmoji(String str){

String pattern="[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]";

String reStr="";

Pattern emoji=Pattern.compile(pattern);

Matcher emojiMatcher=emoji.matcher(str);

String str2 = emojiMatcher.replaceAll(reStr);

return str2;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值