错误 UnicodeDecodeError: 'utf-8' 编解码器无法解码字节 0xff,位于第 31 个位置: 无效的起始字节。
错误 UnicodeDecodeError: 'utf-8' 编解码器无法解码字节 0xff,位于第 31 个位置: 无效的起始字节。
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 (most recent call last):
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月23日
使用这个解决方案,它将剔除(忽略)这些字符并返回不含它们的字符串。只有在您需要剥离它们而不是转换它们时才使用此方法。
with open(path, encoding="utf8", errors='ignore') as f:
使用 errors='ignore'
您将会失去一些字符。但如果您不关心它们,因为它们似乎是客户端连接到我的套接字服务器时由于糟糕的格式和编程而产生的额外字符。
那么这就是一个简单的直接解决方案。
参考
Python试图将一个字节数组(它假定为一个utf-8编码的字符串)转换为一个Unicode字符串(str
)。这个过程当然是按照utf-8的规则进行解码。当Python尝试这样做时,它遇到了一个在utf-8编码的字符串中不允许的字节序列(即在位置0的0xff)。\n\n由于你没有提供我们可以查看的任何代码,我们只能猜测其余部分。\n\n从堆栈跟踪中,我们可以推断出触发动作是从文件中读取(contents = open(path).read()
)。我建议按以下方式重新编码:\n\n
with open(path, 'rb') as f: contents = f.read()
\n\n在open()
中的模式说明符中的b
表示该文件应被视为二进制文件,因此contents
仍将是bytes
。这样就不会尝试解码。