由于部分用户微信名包含emoji表情导致无法存入数据库。
报错为:[2019-08-27 16:21:12] [ERROR] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper:144] Incorrect string value: '\xF0\x9F\x8D\x80\xE6\x9C...' for column 'realname' at row 1
解决方案:过滤emoji表情。
private static boolean isNotEmojiCharacter(char codePoint) {
return (codePoint == 0x0) ||
(codePoint == 0x9) ||
(codePoint == 0xA) ||
(codePoint == 0xD) ||
((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
/**
* 过滤emoji 或者 其他非文字类型的字符
* @param source
* @return
*/
public static String filterEmoji(String source)
{
int len = source.length();
StringBuilder buf = new StringBuilder(len);
for (int i = 0; i < len; i++)
{
char codePoint = source.charAt(i);
if (isNotEmojiCharacter(codePoint))
{
buf.append(codePoint);
} else{
buf.append("");
}
}
return buf.toString();
}