错误 UnicodeDecodeError: ‘ utf-8’编解码器无法在0位解码字节0xff: 无效的起始字节

Https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools

在上面的站点上编译“ process.py”时出错。

 python tools/process.py --input_dir data --            operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png

追溯(最近一次通话) :

File "tools/process.py", line 235, in <module>
main()
File "tools/process.py", line 167, in main
src = load(src_path)
File "tools/process.py", line 113, in load
contents = open(path).read()
File"/home/user/anaconda3/envs/tensorflow_2/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode     byte 0xff in position 0: invalid start byte

错误的原因是什么? Python 的版本是3.5。

1154515 次浏览

Python尝试将一个字节数组(bytes,它假定它是一个utf-8编码的字符串)转换为unicode字符串(str)。这个过程当然是根据utf-8规则进行解码。当它尝试这样做时,它会遇到一个字节序列,该字节序列在utf-8编码的字符串中是不允许的(即位置0的0xff)。

由于你没有提供任何代码,我们可以看,我们只能猜测剩下的。

从堆栈跟踪中,我们可以假设触发动作是读取文件(contents = open(path).read())。我建议以这样的方式重新编码:

with open(path, 'rb') as f:
contents = f.read()

open()中的模式说明符中的b声明该文件应被视为二进制文件,因此contents仍将是bytes。这种方式不会发生解码尝试。

检查要读取的文件的路径。我的代码不断给我错误,直到我改变路径名,以呈现工作目录。错误是:

newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

如果可能,在文本编辑器中打开该文件,并尝试将编码更改为UTF-8。否则,在操作系统级别以编程方式进行。

有一个类似的问题,最后使用UTF-16解码。我的代码如下。

with open(path_to_file,'rb') as f:
contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")
contents = contents.split("\r\n")

这将把文件内容作为导入,但它将以UTF格式返回代码。从那里开始,它将被解码并以行分隔。

我在遇到同样的错误时遇到了这个线程,在做了一些研究后,我可以确认,这是一个错误,当你试图用UTF-8解码UTF-16文件时发生。

对于UTF-16,第一个字符(UTF-16中的2个字节)是一个字节顺序标记(BOM),用作解码提示,不会作为字符出现在解码后的字符串中。这意味着第一个字节将是FE或FF,第二个字节是另一个。

在我发现真正的答案后,被大量编辑

使用此解决方案,它将剥离(忽略)字符并返回不包含它们的字符串。只有使用这个,如果你的需要是剥离他们不转换他们。

with open(path, encoding="utf8", errors='ignore') as f:
使用errors='ignore' < p > 你会丢失一些字符。但如果你不关心他们,因为他们似乎是额外的字符源于一个糟糕的格式和编程的客户端连接到我的套接字服务器。 那么这是一个简单的直接解决方案。 参考 < / p >

只使用

base64.b64decode(a)

而不是

base64.b64decode(a).decode('utf-8')

如果你在mac上,检查是否有一个隐藏文件,. ds_store。删除文件后,我的程序工作。

如果您从串口接收数据,请确保您使用正确的波特率(和其他配置):解码使用(utf - 8),但错误的配置将产生相同的错误

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

在linux上使用stty -F /dev/ttyUSBX -a检查你的串口配置

使用编码格式iso - 8859 - 1来解决这个问题。

我也遇到过类似的问题。

解决方法:

import io


with io.open(filename, 'r', encoding='utf-8') as fn:
lines = fn.readlines()

然而,我遇到了另一个问题。一些html文件(在我的情况下)不是utf-8,所以我收到了类似的错误。当我排除这些html文件时,一切都很顺利。

所以,除了修复代码,还要检查你正在读取的文件,也许确实存在不兼容性。

这仅仅意味着选择了错误的编码来读取文件。

在Mac上,使用file -I file.txt来找到正确的编码。在Linux上,使用file -i file.txt

我在处理从Linux生成的文件时遇到了同样的问题。事实证明,这与包含问号的文件有关。

我有一个类似的问题,并在互联网上搜索这个问题

如果你有这个问题,只需要在一个新的HTML文件中复制你的HTML代码,并使用正常的<meta charset="UTF-8"> 它将工作....

只需在相同的位置创建一个新的HTML文件,并使用不同的名称

您必须使用latin1编码来读取该文件,因为该文件中有一些特殊字符,使用下面的代码片段来读取该文件。

这里的问题是编码类型。当Python不能将数据转换为读取时,它会给出一个错误。

您可以使用latin1或其他编码值。

我建议您尝试并测试为您的数据集找到正确的方法。

这是由于读取文件时的编码方法不同。在python中,它是默认的 使用unicode编码数据。

.

.

我提出了一种编码方法,可以帮助您解决这个问题,如果'utf-8'不工作。

with open(path, newline='', encoding='cp1252') as csvfile:
reader = csv.reader(csvfile)

如果你改变这里的编码方法,它应该可以工作。此外,你可以在这里找到其他编码方法standard-encodings,如果上面不适合你。

我在PNG文件上也有类似的问题。我尝试了以上的解决方案,但都没有成功。 这个在python 3.8

中为我工作
with open(path, "rb") as f:

那些在处理数据帧的Pandas时遇到类似错误的人使用以下解决方案。

示例解决方案。

df = pd.read_csv("File path", encoding='cp1252')

我在试图使用pandas.read_csv()读取“.csv”文件时遇到了这个UnicodeDecodeError。在我的例子中,我无法使用其他编码器类型来克服这个问题。但是我们不用

pd.read_csv(filename, delimiter=';')

我使用:

pd.read_csv(open(filename, 'r'), delimiter=';')

这对我来说还行。

'r'1:在open()函数中,使用'r'代替'rb'。因为'rb'返回的bytes对象首先导致了这个解码器错误,所以在read_csv()中也存在同样的问题。但是'r'返回str,这是必需的,因为我们的数据在.csv中,并且使用默认的encoding='utf-8'参数,我们可以很容易地使用read_csv()函数解析数据。

以下代码在我的情况下工作:

Df = pd。Read_csv (filename,sep =' \t', encoding='cp1252')