问题:解决MySQL emoji表情乱码问题
说明:在一些选择表情的功能里,往往传递到后端入库会抛出异常,这就需要进行处理,方法如下:
方式1.在mysql表点击设置中找到选项,并配置utf8mb4 字符集:
并在字符串类型字段添加配置:
方式2:emoji表情进行正则转换,当然有些表情可能解决不了,常规代码只起借鉴
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
/**
* @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库
* 中保存的格式(表情占4个字节,需要utf8mb4字符集)
*/
public static String emojiConvert1(String str)
throws UnsupportedEncodingException {
String patternStr = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
Pattern pattern = Pattern.compile(patternStr );
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
try {
matcher.appendReplacement(
sb, "[[" + URLEncoder.encode(matcher.group(1), "UTF-8") + "]]");
} catch(UnsupportedEncodingException e) {
throw e;
}
}
matcher.appendTail(sb);
return sb.toString();
}
/**
* @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
*/
public static String emojiRecovery2(String str)
throws UnsupportedEncodingException {
String patternStr = "\\[\\[(.*?)\\]\\]";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
try {
matcher.appendReplacement(sb, URLDecoder.decode(matcher.group(1), "UTF-8"));
} catch(UnsupportedEncodingException e) {
throw e;
}
}
matcher.appendTail(sb);
return sb.toString();
}
注意:目前解决数据库表情异常一般使用方式1