用python 获取微信用户信息时中文字符乱码解决办法

问题

在使用微信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:编码问题真是一个大坑!!!绕是绕不过去的,只能见坑填坑。。。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值