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

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

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:])]

解码微信登录获取手机号时报错,有时又正常,要如何写


回答:

可能有两个原因:

  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')

'��国'

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

以上是 pytho3中编码问题报错&#x27;utf-8&#x27; codec can&#x27;t decode byte 0xdc in position 1 的全部内容, 来源链接: utcz.com/a/162675.html

回到顶部