当我写简单代码时,我一直遇到 “UnicodeDecodeError: 'utf-8' 编解码器不能解码位置 3131 的字节 0x80:无效的起始字节” 错误。

9 浏览
0 Comments

当我写简单代码时,我一直遇到 “UnicodeDecodeError: 'utf-8' 编解码器不能解码位置 3131 的字节 0x80:无效的起始字节” 错误。

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

回溯(Traceback)(最近的调用最先显示):

File "tools/process.py", line 235, in 
  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.2。

admin 更改状态以发布 2023年5月20日
0
0 Comments

使用这个解决方案,它将删除(忽略)这些字符并返回不含它们的字符串。只有在需要删除这些字符而不是转换它们时才使用此选项。

with open(path, encoding="utf8", errors='ignore') as f:

使用errors='ignore'
你将只失去一些字符。但是,如果你不关心它们,因为它们似乎是由于客户端连接到我的套接字服务器时的糟糕格式和编程而产生的额外字符。
那么这是一个简单直接的解决方案。
参考

0
0 Comments

Python试图将一个字节数组(一个它假定为utf-8编码的字符串的bytes)转换为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。这种方式不会进行任何解码尝试。

0