pytho3中编码问题报错'utf-8' codec can't decode byte 0xdc in position 1

发布于 2022-09-12 03:03:24 字数 590 浏览 13 评论 0

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:])]
解码微信登录获取手机号时报错,有时又正常,要如何写

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

转身以后 2022-09-19 03:03:24

可能有两个原因:

  1. 你的数据编码不是 utf8 ;
  2. 你处理数据时,破坏了数据的完整性;

第一个原因就不说,你换成正确的编码即可。

第二个原因举个例子,对于合法的UTF8编码文本,可以成功解码:

>>> data = '中国'.encode('utf8')
>>> data.decode('utf8')
'中国'

如果因为某种原因,UTF8文本少了一个字节或者某个字节错掉了,解码时就会抛锚:

>>> data[1:].decode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 0: invalid start byte

这时,你可以选择在解码中忽略错误:

>>> data[1:].decode('utf8', errors='ignore')
'国'

或者将不可识别的字符替换成一个问号,以便定位UTF8字节流问题位置:

>>> data[1:].decode('utf8', errors='replace')
'��国'

更多关于文本编码的细节介绍,可以参考我先前写的文章:一文说清文本编码那些事

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文