https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools
在上述站点编译“process.py”时发生错误。
python tools/process.py --input_dir data --operation resize --output_dir data2/resize data/0.jpg -> data2/resize/0.png Traceback (most recent call last): 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.2。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte 这个错误的翻译是:“UTF-8 编码解码器无法解码位置 0 的字节 0xff:无效的起始字节”。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
这个错误通常发生在尝试使用 UTF-8 编码来读取或解码一个不是以 UTF-8 编码的文件时。在这个具体的例子中,错误发生在尝试读取一个图片文件(如 JPEG 或 PNG)时,这些文件通常不是以文本形式存储的,而是使用二进制格式。
在 Python 中,当你使用 open() 函数打开文件而没有指定模式(默认为 ‘r’,即文本模式)时,Python 会尝试使用系统的默认编码(通常是 UTF-8)来读取文件。然而,对于非文本文件(如图片、视频或任何二进制文件),这会导致解码错误,因为二进制数据中的字节序列可能不包含有效的 UTF-8 编码文本。
open()
为了解决这个问题,你应该以二进制模式(’rb’)打开这些文件。例如,如果你的脚本中尝试读取图片文件,你应该这样修改代码:
with open('data/0.jpg', 'rb') as f: contents = f.read() # 现在你可以对 contents 进行进一步处理,比如保存为另一个文件或进行图像处理
这样,Python 就不会尝试将文件内容解码为 UTF-8 文本,而是会将其作为一个字节序列来读取。
Python 尝试将字节数组(bytes它假设为 utf-8 编码的字符串)转换为 unicode 字符串 ( str)。这个过程当然是根据 utf-8 规则进行解码。当它尝试这样做时,它会遇到 utf-8 编码字符串中不允许的字节序列(即位置 0 处的 0xff)。
bytes
str
由于您没有提供任何我们可以查看的代码,因此我们只能猜测其余部分。
从堆栈跟踪中,我们可以假设触发操作是读取文件(contents = open(path).read())。我建议以如下方式重新编码:
contents = open(path).read()
with open(path, 'rb') as f: contents = f.read()
b中的模式说明符open()规定文件应被视为二进制文件,因此contents将保留为bytes。 这样就不会发生任何解码尝试。
b
contents