前言

记录一下微信小程序开发过程中关于编码的坑。

客服消息乱码

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编码, 忽略编码异常的部分