关于微信授权获取昵称含Emoji表情引发的乱码问题总结

注:本文首发在微信开房社区(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() {
            @Override
            public 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);
                }
            }

            @Override
            public void onError(int code, Throwable throwable) {
                if (callback != null) {
                    callback.onTokenCheckFailed("微信用户信息获取出错: " + code);
                }
            }
        });

 

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

  • 1、SoftBank版本(网上一般称之为SB Unicode),如😂为E412;
  • 2、Unified版本,如😂为1F602;
  • 3、自定义表情版本,如[捂脸]。

举个例子,😂(喜极而泣)的各种编码如下:
SoftBank:0000E412
Unified:0001F602(U+1F602)
DoCoMo:0000E72A
KDDI:0000EB64
Google:000FE334
UTF-8:F09F9882(%F0%9F%98%82)
UTF-16BE:FEFFD83DDE02(\uD83D\uDE02)
UTF-16LE:FFFE3DD802DE
UTF-32BE:0000FEFF0001F602
UTF-32LE:FFFE000002F60100

Emoji表情代码表参阅:http://punchdrunker.github.io/iOSEmoji/table_html/index.html

对于SoftBank及微信自家定义的表情,需要做映射处理转换成标准的Unified版本的Emoji表情才能正常显示,否则就可能乱码。具体解决方案参见https://github.com/gzu-liyujiang/UnicodeEmoji

SoftBank版本编码与Unified版本编码对应关系
{
“E150”: “0001F68F”,
“E030”: “0001F338”,
“E151”: “0001F6BB”,
“E152”: “0001F46E”,
“E031”: “0001F531”,
“E032”: “0001F339”,
“E153”: “0001F3E3”,
…省略…
}
SoftBank版本编码与标准Unicode编码对应关系
{
“E150”: “\uD83D\uDE8F”,
“E030”: “\uD83C\uDF38”,
“E151”: “\uD83D\uDEBB”,
“E152”: “\uD83D\uDC6E”,
“E031”: “\uD83D\uDD31”,
“E032”: “\uD83C\uDF39”,
“E153”: “\uD83C\uDFE3”,
…省略…
}
SoftBank版本编码与标准的Emoji字符表情的对应关系
{
“E150”: “🚏”,
“E030”: “🌸”,
“E151”: “🚻”,
“E152”: “👮”,
“E031”: “🔱”,
“E032”: “🌹”,
“E153”: “🏣”,
…省略…
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值