APP中使用微信登录,流程一般是APP通过微信SDK请求code,然后APP使用code请求自己的服务器,服务器根据code获取access token,然后根据token和openid获取用户信息。在最后一步获取用户信息时经常出现中文乱码问题,这里记录下解决方案。
获取用户信息中文乱码
这里的乱码主要是昵称,有时候也有国家和省份城市信息乱码,如果里面包含了中文,解决方法是: 解析API请求结果之前设置encoding
,这里以python为例:
import requests
req = requests.get('https://api.weixin.qq.com/sns/userinfo', params={
'access_token': access_token,
'openid': openid,
'lang': 'zh_CN',
})
req.encoding = 'utf-8' # 解决微信用户名乱码问题
print(req.json())
网上有些地方也说需要将请求参数 lang 设置为“en”,或者设置headers中的Language为“en”;自己试了下其实不设置也OK,相反设置了之后返回的用户信息就是英文形式的,不便于我们解析和处理。
Emoji表情昵称乱码
微信昵称中可以包含Emoji表情,为了能够正常存储用户信息,我们需要在数据库层面设置数据库字符集解决这个问题,这里以MySQL数据为例。
通过上面的方式,我们已经可以正常解析Emoji表情,但是由于数据库字符集不支持,存储时会报错,为了能够存储Emoji表情,我们需要将数据库字符集设置为utf8mb4。具体操作如下:
1. 修改MySQL配置
# 打开配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 增加以下内容
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# 重启MySQL
sudo service mysql restart
2. 修改数据库,表的字符集
ALTER database DB_NAME default character set = utf8mb4;
ALTER table TABLE_NAME default character set = utf8mb4;
ALTER table TABLE_NAME convert to character set utf8mb4;
这样设置之后就可以正常存储Emoji表情啦~~
Over!
注意:本文来自降龙。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!
CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。