注:本文首发在微信开房社区(https://developers.weixin.qq.com/community/develop/article/doc/000c84d49d4058d35e99bbaef5b013)

做过微信授权的小伙伴都可能会遇到获取用户昵称乱码问题,那是因为微信昵称中的含有SoftBank版本的Emoji表情。

如我的微信昵称:

微信原始昵称含三种Emoji表情:
微信授权昵称未处理Emoji表情:
微信授权昵称已处理Emoji表情:

        String url = String.format("https://api.weixin.qq.com/sns/userinfo?" +"access_token=%s&openid=%s", wxToken.getAccess_token(), wxToken.getOpenid());HttpClient.get(url, new TextCallback() {@Overridepublic void onSuccess(Map<String, List<String>> headers, String result) {Logger.debug("获取微信用户信息UTF8-Emoji编码前:" + result);result = UnicodeUtils.emojiEncode(false, result);Logger.debug("获取微信用户信息UTF8-Emoji编码后:" + result);WXUserInfo wxUserInfo = new Gson().fromJson(result, WXUserInfo.class);WXAuthCallback callback = WeChatSDK.getAuthCallback();if (callback != null) {callback.onUserInfoReceived(wxUserInfo);}}@Overridepublic void onError(int code, Throwable throwable) {if (callback != null) {callback.onTokenCheckFailed("微信用户信息获取出错: " + code);}}});

Emoji表情有很多种版本,其中包括Unified、DoCoMo、KDDI、SoftBank和Google,不同版本的Unicode代码并不一定相同。经研究,微信昵称中的Emoji表情截止目前(2019.12.10)已知支持三种版本: