问题
在使用微信api"https://api.weixin.qq.com/cgi-bin/user/info"获取微信用户信息时会遇到乱码
>>> import requests
>>> import json
>>> get_fansInfo_api = 'https://api.weixin.qq.com/cgi-bin/user/info'
>>> get_fansInfo_params = {'access_token':accessToken, 'openid':openID, 'lang':'zh_CN'}
>>> fansInfo_get = requests.get(get_fansInfo_api, params = get_fansInfo_params)
>>> fansInfo = json.loads(fansInfo_get.text)
>>> print(fansInfo)
{'subscribe': 1,
'openid': 'o9U25jmZ-Z18J52hz_yPsm15TlCs',
'nickname': 'A陈🌟 ℡₠₃₃₅₆₃₆₀₅₅₅',
'sex': 2,
'language': 'zh_CN',
'city': 'æ½ å Š',
'province': '山东',
'country': 'ä¸å›½',
'headimgurl': 'http://thirdwx.qlogo.cn/mmopen/Q3auHgzwzM4ANnPR9FparEkfG5hERuianibL8QRKic9nlKfMyicym4Vx2aI2CR3aicWd8jDnuRm3NCpxJI6JTSw/12',
'subscribe_time': 1553739261,
'remark': '',
'groupid': 0,
'tagid_list': [],
'subscribe_scene': 'ADD_SCENE_QR_CODE',
'qr_scene': 0,
'qr_scene_str': ''}
对比发现,所有nickname中包含特殊字符的情况下,nickname、city、country、province字段全部为乱码,而nickname如果全为普通中文字符,则一切正常。
解决办法:
使用fansInfo_get.content,而非fansInfo_get.text即可
>>> import requests
>>> import json
>>> get_fansInfo_api = 'https://api.weixin.qq.com/cgi-bin/user/info'
>>> get_fansInfo_params = {'access_token':accessToken, 'openid':openID, 'lang':'zh_CN'}
>>> fansInfo_get = requests.get(get_fansInfo_api, params = get_fansInfo_params)
>>> fansInfo = json.loads(fansInfo_get.content)
知乎上也有类似对微信编码问题的讨论,总结下来就是先用‘ISO-8859-1’进行编码,再用‘UTF-8’进行解码
>>> fansInfo_get.text.encode('iso-8859-1').decode('utf8')
ps:编码问题真是一个大坑!!!绕是绕不过去的,只能见坑填坑。。。