Python.UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte。UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte.

问题描述 投票:0回答:1

我从一个目录中获取数据,它给出的数据是字节格式的。

字节数据。

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

AND":我使用的代码(Python 3.7.3):AND

import json
json.dumps(blob.decode())

我也用过 pickle, astpprint 但他们在这里没有帮助。

我试了一下。

python utf-8 bytecode
1个回答
0
投票

你可以尝试忽略那些不可读的块。

blobs.decode('utf-8', 'ignore')

这不是一个很好的解决方案,但是你生成字节对象的方式有一些问题。也许吧 utf-8 不是您数据的正确编码。


0
投票

编码的 UTF-8编码 具有一定的内置冗余,至少有两个作用。

1)定位来回读取的码点。

起始字节(以携带实际数据的二进制点为单位)与以下4种模式之一相匹配

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

而延续字节(0至3)的形式总是这样的。

10......

2)检查有效性

如果不遵守这个编码,可以肯定地说,这不是UTF-8数据,例如,因为在传输过程中发生了损坏。

结论

为什么会有这样的说法呢?b'\x80\' 不能是UTF-8吗?在前两个字节就已经违反了编码规则:因为80必须是一个延续字节。这就是 恰恰 您的错误信息是什么?

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte.

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

© www.soinside.com 2019 - 2024. All rights reserved.