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。
dos2unix
。
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
。这种方式不会发生解码尝试。
使用此解决方案,它将删除(忽略)字符并返回没有它们的字符串。仅当您需要剥离它们而不是转换它们时才使用它。
with open(path, encoding="utf8", errors='ignore') as f:
使用 errors='ignore'
您只会丢失一些字符。但是如果您不关心它们,因为它们似乎是源自连接到我的套接字服务器的客户端的错误格式和编程的额外字符。然后它是一个简单的直接解决方案。 reference
contents = contents.decode('utf-8', 'ignore')
来源:docs.python.org/3/howto/unicode.html#the-string-type
使用编码格式 ISO-8859-1 来解决这个问题。
有类似的问题,最终使用 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 格式返回代码。从那里它将被解码并按行分隔。
with open(path, encoding='utf-16') as f
来简化此操作
TypeError: an integer is required (got type str)
错误。为什么?这两个文件都是二进制文件,读取为 rb
。
encoding
参数仅在阅读文本时才有意义。从模式参数中删除“b”并重试。在文档中阅读更多信息:docs.python.org/3/library/functions.html#open
我在遇到同样的错误时遇到了这个线程,经过一些研究我可以确认,这是当您尝试使用 UTF-8 解码 UTF-16 文件时发生的错误。
With UTF-16 the first characther (2 bytes in UTF-16) is a Byte Order Mark (BOM),用作解码提示,在解码后的字符串中不作为字符出现。这意味着第一个字节将是 FE 或 FF,第二个字节是另一个。
在我找到真正的答案后进行了大量编辑
这是由于读取文件时的编码方法不同。在 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:
仅使用
base64.b64decode(a)
代替
base64.b64decode(a).decode('utf-8')
它只是意味着一个人选择了错误的编码来读取文件。
在 Mac 上,使用 file -I file.txt
查找正确的编码。在 Linux 上,使用 file -i file.txt
。
那些在处理 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=';')
这对我来说似乎很好。
注意:在 open()
函数中,使用 'r'
而不是 'rb'
。因为 'rb'
返回的 bytes
对象首先导致发生此解码器错误,这与 read_csv()
中的问题相同。但是 'r'
返回 str
,这是需要的,因为我们的数据在 .csv
中,并且使用默认的 encoding='utf-8'
参数,我们可以使用 read_csv()
函数轻松解析数据。
如果您使用的是 Mac,请检查是否有隐藏文件 .DS_Store。删除文件后,我的程序工作了。
如果您从串行端口接收数据,请确保使用正确的波特率(和其他配置):使用 (utf-8) 解码,但错误的配置会产生相同的错误
UnicodeDecodeError:“utf-8”编解码器无法解码位置 0 的字节 0xff:无效的起始字节
检查你在 linux 上的串口配置,使用:stty -F /dev/ttyUSBX -a
我有一个类似的问题,并在整个互联网上搜索了这个问题
如果您遇到此问题,只需将您的 HTML 代码复制到一个新的 HTML 文件中并使用正常的 <meta charset="UTF-8">
即可。...
只需在同一位置创建一个新的 HTML 文件并使用不同的名称
检查要读取的文件的路径。我的代码一直给我错误,直到我将路径名更改为当前工作目录。错误是:
newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
您必须使用 latin1 编码来读取此文件,因为此文件中有一些特殊字符,请使用以下代码片段来读取文件。
这里的问题是编码类型。当 Python 无法转换要读取的数据时,会报错。
您可以使用 latin1 或其他编码值。
我说尝试和测试为您的数据集找到合适的。
我有一个类似的问题。
通过以下方式解决了它:
import io
with io.open(filename, 'r', encoding='utf-8') as fn:
lines = fn.readlines()
但是,我遇到了另一个问题。一些 html 文件(在我的情况下)不是 utf-8,所以我收到了类似的错误。当我排除那些 html 文件时,一切都很顺利。
因此,除了修复代码之外,还要检查您正在读取的文件,也许确实存在不兼容性。
处理从 Linux 生成的文件时,我遇到了同样的问题。事实证明它与包含问号的文件有关..
以下代码适用于我的情况:
df = pd.read_csv(文件名,sep = '\t',编码='cp1252')
如果可能,请在文本编辑器中打开文件并尝试将编码更改为 UTF-8。否则在操作系统级别以编程方式进行。
我有一个类似的问题。我尝试在 tensorflow/models/objective_detection 中运行一个示例并遇到相同的消息。尝试将 Python3 更改为 Python2
不定期副业成功案例分享
rb
(我认为顺序并不重要,但至少在某些系统/版本中似乎如此)。我相应地改变了我的答案。byte 0xff in position 0
也可能意味着文件以 UTF-16 编码,那么您可以改为使用with open(path, encoding='utf-16') as f:
0
实际上没有0xff
字符怎么办?它是UTF-8
编码的。