def decrypts(self, encryptedData, iv):
new_sessionKey = base64.b64decode(self.sessionKey)
new_encryptedData = base64.b64decode(encryptedData)
new_iv = base64.b64decode(iv)
cipher = AES.new(new_sessionKey, AES.MODE_CBC, new_iv)
decrypted = json.loads(self._unpad(cipher.decrypt(new_encryptedData)).decode) # 会出现"utf-8"错误
if decrypted['watermark']['appid'] != self.appId:
raise Exception('Invalid Buffer')
return decrypted
def _unpad(self, s):
return s[:-ord(s[len(s)-1:])]
解码微信登录获取手机号时报错,有时又正常,要如何写
可能有两个原因:
第一个原因就不说,你换成正确的编码即可。
第二个原因举个例子,对于合法的UTF8编码文本,可以成功解码:
如果因为某种原因,UTF8文本少了一个字节或者某个字节错掉了,解码时就会抛锚:
这时,你可以选择在解码中忽略错误:
或者将不可识别的字符替换成一个问号,以便定位UTF8字节流问题位置:
更多关于文本编码的细节介绍,可以参考我先前写的文章:一文说清文本编码那些事