刚开始写小程序,获取客户昵称,后来发现用户昵称是可以为emoji表情的,而Mysql数据库中是不支持直接将emoji表情直接存入数据库的,后来在网站上找了一个方法将所有的昵称转变为Unicode编码存入数据库 例如:\ud83c\udf52这个样子的字符串
具体方法为:将str转变为Unicode未解码字符串:
public static String unicode(String source){
StringBuffer sb = new StringBuffer();
char [] source_char = source.toCharArray();
String unicode = null;
for (int i=0;i<source_char.length;i++) {
unicode = Integer.toHexString(source_char[i]);
if (unicode.length() <= 2) {
unicode = "00" + unicode;
}
sb.append("\\u" + unicode);
}
return sb.toString()
}
其中的source就是需要转换的字符串。
如果从数据库中获取需要将数据库中的Unicode未解码字符串转变为解码后的字符,具体方法为
方法一:
public static String decodeUnicode(String unicode) {
StringBuffer sb = new StringBuffer();
String[] hex = unicode.split("\\\\u");
for (int i = 1; i < hex.length; i++) {
int data = Integer.parseInt(hex[i], 16);
sb.append((char) data);
}
return sb.toString();
}
方法二:
public static String decodeUnicode2(String dataStr) {
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while (start > -1) {
end = dataStr.indexOf("\\u", start + 2);
String charStr = null;
if (end == -1) {
charStr = dataStr.substring(start + 2, dataStr.length());
} else {
charStr = dataStr.substring(start + 2, end);
}
char letter = (char) Integer.parseInt(charStr, 16);
buffer.append(new Character(letter).toString());
start = end;
}
return buffer.toString();
}
通过以上两种方法将数据库中的字符串转变成中文字符或者emoji表情
但是后来又发现一个问题,就是无法通过模糊查询或者精确查询'\ud83c\udf52'这样的字符串,具体原因似乎是Mysql会将'\'舍去,所以 selece * from table where nick_name like '%\ud83c\udf52%' 这样查出来的是空的,如果需要查询这样的字符需要将'\'转变成'_'来进行查询 selece * from table where nick_name like '%_ud83c_udf52%' 这样就可以查出自己想查询的信息了。
原文地址:https://blog.csdn.net/qq_34492495/article/details/79092992