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:])]
解码微信登录获取手机号时报错,有时又正常,要如何写
回答:
可能有两个原因:
- 你的数据编码不是 utf8 ;
- 你处理数据时,破坏了数据的完整性;
第一个原因就不说,你换成正确的编码即可。
第二个原因举个例子,对于合法的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中编码问题报错'utf-8' codec can't decode byte 0xdc in position 1 的全部内容, 来源链接: utcz.com/a/162675.html