做过微信授权的小伙伴都可能会遇到获取用户昵称乱码问题,那是因为微信昵称中的含有SoftBank版本的Emoji表情。
如我的微信昵称:
正常显示为;
未处理Softbank及微信自定义表情显示为;
处理Softbank后显示为。
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”: “🏣”,
…省略…
}