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.2。


当前回答

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

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

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

其他回答

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

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

使用错误=“忽略” 你会丢失一些字符。但如果你不关心他们,因为他们似乎是额外的字符源于一个糟糕的格式和编程的客户端连接到我的套接字服务器。 那么这是一个简单的直接解决方案。 参考

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

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

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

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

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

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

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

Python尝试将一个字节数组(一个字节,它假设是一个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表示该文件应被视为二进制,因此内容将保持为字节。这种方式不会发生解码尝试。