最近项目中遇到emoji表情存储的问题,后来就在网上搜了很多,
总结出两种方法进行处理:
1.通过正则匹配进行过滤,代码如下:
//emoji表情过滤
public static String filterEmoji(String source) {
if(source != null){
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()){
source = emojiMatcher.replaceAll("");
return source;
}
return source;
}
return source;
}
2.通过修改数据库编码进行存储,最好在创建数据库的时候就采用该编码:
好多都说把mysql数据库字符集编码改成utf8mb4_unicode_ci,改完之后存储的emoji表情是4个问号,后来接着上网查,发现了通过引入emoji-java的jar方式来处理emoji表情,下面是两段转换代码: //把含有emoji表情的字符串中的emoji表情转成相应的alias String result = EmojiParser.parseToAliases(name); //把取得的别名转成对应的emoji表情 name = EmojiParser.parseToUnicode(name); 具体参考:https://github.com/vdurmont/emoji-java 上面的方法虽然可以用,但是需要比对jar包中的表情库,所系速度上相对来说较慢,后来我又继续研究上面 通过修改数据库编码的方式来解决,最后通过配置my.ini文件,把数据库编码格式修改成以下格式后就可以了, 原来出现乱码是因为我的character_set_server格式是latin1,改成utf8mb4后就可以了,可以看下成功的截图:

表字段:

表引擎:

数据库:

数据:

不用管数据库中存的是乱码,取出来的环境支持emoji时就会显示出来。