1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【微信小程序】微信小程序开发--用户昵称中带有emoji表情的处理方法

【微信小程序】微信小程序开发--用户昵称中带有emoji表情的处理方法

时间:2024-05-13 16:55:41

相关推荐

【微信小程序】微信小程序开发--用户昵称中带有emoji表情的处理方法

刚开始写小程序,获取客户昵称,后来发现用户昵称是可以为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%' 这样就可以查出自己想查询的信息了。

原文地址:/qq_34492495/article/details/79092992

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。