最近做微信开发,部署到服务器上后有条测试数据错误了,在获取code的时候显示40163和40001错误,一般40001错误就是微信公众号的密钥不对,但是我看了是对的,并且前面几条数据都没有问题,就只有这一条错误,后来发现,因为这条数据获取的微信用户名称里面有emoji表情,这是个大坑
解决办法:
在controller层方法加上:
SnsUser su = new SnsUser();
su.setOpenid(userObj.getString("openid"));
String nickname = userObj.getString("nickname");
nickname = nickname.replaceAll("[^\\u0000-\\uFFFF]", "*");
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Matcher emojiMatcher = emoji.matcher(nickname);
if(emojiMatcher.find()) {
nickname = emojiMatcher.replaceAll("*");
}
su.setNickname(nickname);
这样会把表情变成*存入数据库,这样就解决了40163和40001的错误。