java 替换emoji表情字符串

问题:用户发送的emoji表情,直接存入数据库,会出现java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8E\xF0\x9F…’ for…

原因:emoji表情是utf-8编码,但是占用4个字节,而mysql的utf-8字符集的数据库每个字符只有3个字节,所以无法保存emoji表情到mysql数据库。

 

一、采用正则替换

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; 
     }

二、通过第三方jar包来转换emoji表情,加入maven依赖:


  com.github.binarywang
  java-emoji-converter
  0.1.1

代码中,对聊天的内容进行转义:

private EmojiConverter emojiConverter = EmojiConverter.getInstance();
emojiConverter.toAlias(data.getMsgContent());//将聊天内容进行转义

 

你可能感兴趣的:(Java)