Python:UnicodeDecodeError:'utf-8'编解码器无法解码位置 0 中的字节 0x80:起始字节无效

新手上路,请多包涵

我正在从目录中获取数据,它以字节格式提供数据。

字节数据:

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

我还使用 pickleastpprint 但它们在这里没有帮助。

我尝试了什么:

原文由 L Lawliet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

UTF-8 编码 有一些内置的冗余,至少有两个用途:

1)定位码点来回读取

起始字节(以二进制点形式携带实际数据)匹配这 4 种模式之一

0.......
110.....
1110....
11110...

而连续字节(0 到 3)总是这种形式

10......

2) 检查有效性

如果不遵守此编码,则可以安全地说它不是 UTF-8 数据,例如因为在传输过程中发生了损坏。

结论

为什么可以说 b'\x80\' 不能是 UTF-8?已经在前两个字节违反了编码:因为 80 必须是一个连续字节。这 正是 您的错误消息所说的:

UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 中的字节 0x80:起始字节无效

即使你跳过这个,你也会在 b'%\x83' 的一些字节后遇到另一个问题,所以很可能你正在尝试解码错误的数据或假设错误的编码。

原文由 Wolf 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题