前言
记录一下微信小程序开发过程中关于编码的坑。
客服消息乱码
customerMessageUrl = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={}'
def send_customer_message(app_id, to_user):
access_token = get_access_token(app_id)['access_token']
txt_msg = {
"touser": to_user,
"msgtype": "text",
"text": {
"content": "你好"
}
}
try:
result = requests.post(customerMessageUrl.format(access_token), json=txt_msg)
except:
pass
else:
return result.json()
# 上面程序客户端收到的文本内容是ascii码,没有正常显示中文
# 解决
data = json.dumps(txt_msg, ensure_ascii=False).encode('utf-8') # 不使用ascii编码, 再重新用utf-8编码
result = requests.post(customerMessageUrl.format(access_token), data=data)
获取用户详细信息解密失败
小程序前端调用wx.getUserInfo()获取用户信息
前端把对称加密的加密内容传给后端, 后端解密, 获取用户的详细信息
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData))
官方SDK的这行代码有几率出现如下错误
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2022' in position 0
解决
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)).decode('utf-8', "ignore")) 重新utf-8编码, 忽略编码异常的部分