我正在从目录中获取数据,它以字节格式提供数据。
字节数据:
b'\x80\x00\x00\x00\n\x00\x00%\x83\xa0\x08\x01\x00\xbb@\x00\x00\x05p
\x02\x00>\xf3\x00\x00\x00}\x02\x00`\x03\xef0\x00\x00\r\xc0
\x06\xf0>\xf3\x00\x00\x02\x88\x02\x03\xec\x03\xef0\x00\x00/.....'
在以字符串或任何可读格式转换此数据时出现此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
我使用的代码(Python 3.7.3):
blobs = blob.decode('utf-8')
和
import json
json.dumps(blob.decode())
我还使用 pickle
、 ast
和 pprint
但它们在这里没有帮助。
我尝试了什么:
- UnicodeDecodeError:“utf8”编解码器无法解码位置 0 中的字节 0xa5:起始字节无效
- 错误 UnicodeDecodeError:’utf-8’ 编解码器无法解码位置 0 中的字节 0xff:起始字节无效
- Python 3 CSV 文件给出 UnicodeDecodeError: ‘utf-8’ codec can’t decode byte error when I print ‘utf-8’ codec can’t decode byte 0x80
- UnicodeDecodeError:“utf8”编解码器无法解码位置 3131 中的字节 0x80:起始字节无效
- https://www.edureka.co/community/52722/unicodedecodeerror-codec-decode-position-invalid-start-byte
原文由 L Lawliet 发布,翻译遵循 CC BY-SA 4.0 许可协议
UTF-8 编码 有一些内置的冗余,至少有两个用途:
1)定位码点来回读取
起始字节(以二进制点形式携带实际数据)匹配这 4 种模式之一
而连续字节(0 到 3)总是这种形式
2) 检查有效性
如果不遵守此编码,则可以安全地说它不是 UTF-8 数据,例如因为在传输过程中发生了损坏。
结论
为什么可以说
b'\x80\'
不能是 UTF-8?已经在前两个字节违反了编码:因为 80 必须是一个连续字节。这 正是 您的错误消息所说的:即使你跳过这个,你也会在
b'%\x83'
的一些字节后遇到另一个问题,所以很可能你正在尝试解码错误的数据或假设错误的编码。