问题:用户发送的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依赖:
<dependency> <groupId>com.github.binarywang</groupId> <artifactId>java-emoji-converter</artifactId> <version>0.1.1</version> </dependency>
代码中,对聊天的内容进行转义:
private EmojiConverter emojiConverter = EmojiConverter.getInstance(); emojiConverter.toAlias(data.getMsgContent());//将聊天内容进行转义
文章来源: https://blog.csdn.net/xiaogezq0/article/details/90234008