關於微信授權獲取暱稱含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”: “🏣”,
…省略…
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章