错误 UnicodeDecodeError:'utf-8' 编解码器无法解码位置 0 中的字节 0xff:无效的起始字节
- 2025-01-07 08:44:00
- admin 原创
- 159
问题描述:
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。
解决方案 1:
Python 尝试将字节数组(bytes
它假设为 utf-8 编码的字符串)转换为 unicode 字符串 ( str
)。这个过程当然是根据 utf-8 规则进行解码。当它尝试这样做时,它会遇到 utf-8 编码字符串中不允许的字节序列(即位置 0 处的 0xff)。
由于您没有提供任何我们可以查看的代码,因此我们只能猜测其余部分。
从堆栈跟踪中,我们可以假设触发操作是读取文件(contents = open(path).read()
)。我建议以如下方式重新编码:
with open(path, 'rb') as f:
contents = f.read()
b
模式说明符中的 表示文件open()
应被视为二进制文件,因此contents
将保留为bytes
。 这样就不会发生任何解码尝试。
解决方案 2:
使用此解决方案,它将删除(忽略)字符并返回不包含这些字符的字符串。仅当您只需要删除它们而不是转换它们时才使用此方法。
with open(path, encoding="utf8", errors='ignore') as f:
使用errors='ignore'
您只会丢失一些字符。但如果您不关心它们,因为它们似乎是由于连接到我的套接字服务器的客户端的格式和编程错误而产生的额外字符。那么这是一个简单直接的解决方案。
参考
解决方案 3:
使用编码格式ISO-8859-1来解决这个问题。
解决方案 4:
遇到了类似的问题,最终使用 UTF-16 进行解码。我的代码如下。
with open(path_to_file,'rb') as f:
contents = f.read()
contents = contents.rstrip("
").decode("utf-16")
contents = contents.split("
")
这会将文件内容作为导入,但它会返回 UTF 格式的代码。从那里它将被解码并用行分隔。
解决方案 5:
我在遇到同样的错误时遇到了这个线程,经过一些研究后我可以确认,这是当您尝试使用 UTF-8 解码 UTF-16 文件时发生的错误。
对于 UTF-16,第一个字符(UTF-16 中为 2 个字节)是字节顺序标记 (BOM),用作解码提示,不会在解码后的字符串中显示为字符。这意味着第一个字节将是 FE 或 FF,而第二个字节将是另一个。
在找到真正的答案后,我进行了大量编辑
解决方案 6:
处理 Pandas 数据框时出现类似错误的人可以使用以下解决方案。
示例解决方案。
df = pd.read_csv("File path", encoding='cp1252')
解决方案 7:
我在处理 PNG 文件时遇到了类似的问题。我尝试了上述解决方案,但没有成功。这个在python 3.8中对我有用
with open(path, "rb") as f:
解决方案 8:
仅使用
base64.b64decode(a)
而不是
base64.b64decode(a).decode('utf-8')
解决方案 9:
这仅仅意味着选择了错误的编码来读取文件。
在 Mac 上,使用file -I file.txt
查找正确的编码。在 Linux 上,使用file -i file.txt
。
解决方案 10:
这是因为读取文件时编码方式不同,python默认使用unicode编码,但在不同的平台可能不适用。
如果“utf-8”不起作用,我建议一种编码方法可以帮助您解决这个问题。
with open(path, newline='', encoding='cp1252') as csvfile:
reader = csv.reader(csvfile)
如果您在此处更改编码方法,它应该可以工作。此外,如果上面的方法不适合您,您可以在此处找到其他编码方法standard-encodings 。
解决方案 11:
我UnicodeDecodeError
在尝试使用 读取“.csv”文件时遇到了这个问题pandas.read_csv()
。就我而言,我无法使用其他编码器类型来解决这个问题。但是我没有使用
pd.read_csv(filename, delimiter=';')
我用过:
pd.read_csv(open(filename, 'r'), delimiter=';')
对我来说这似乎很好。
注意:在open()
函数中,使用'r'
而不是'rb'
。因为'rb'
返回的bytes
对象首先会导致发生此解码器错误,这与 中的问题相同read_csv()
。但由于我们的数据在 中,因此'r'
返回是必需的,并且使用默认参数,我们可以轻松地使用函数解析数据。str
`.csvencoding='utf-8'
read_csv()`
解决方案 12:
如果你从串行端口接收数据,请确保使用正确的波特率(和其他配置):使用(utf-8)解码,但错误的配置会产生相同的错误
UnicodeDecodeError:'utf-8'编解码器无法解码位置 0 处的字节 0xff:无效的起始字节
要检查 Linux 上的串行端口配置,请使用:stty -F /dev/ttyUSBX -a
解决方案 13:
我遇到了类似的问题,并在网上搜索了这个问题
如果您遇到此问题,只需将您的 HTML 代码复制到新的 HTML 文件中并使用正常方法 <meta charset="UTF-8">
,它就会起作用......
只需在同一位置创建一个新的 HTML 文件并使用不同的名称
解决方案 14:
检查要读取的文件的路径。我的代码一直出错,直到我将路径名更改为当前工作目录。错误是:
newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
解决方案 15:
如果您使用的是 Mac,请检查是否存在隐藏文件 .DS_Store。删除该文件后,我的程序就可以正常工作了。
解决方案 16:
我遇到了类似的问题。
解决方式:
import io
with io.open(filename, 'r', encoding='utf-8') as fn:
lines = fn.readlines()
但是,我遇到了另一个问题。一些 html 文件(就我而言)不是 utf-8,因此我收到了类似的错误。当我排除这些 html 文件时,一切都顺利进行。
因此,除了修复代码之外,还要检查您正在读取的文件,也许那里确实存在不兼容问题。
解决方案 17:
您必须使用 latin1 编码来读取此文件,因为此文件中有一些特殊字符,请使用以下代码片段来读取该文件。
这里的问题是编码类型。当 Python 无法转换要读取的数据时,它会给出错误。
您可以使用 latin1 或其他编码值。
我说尝试并测试以找到适合您的数据集的正确方法。
解决方案 18:
我在处理 Linux 生成的文件时遇到了同样的问题。结果发现它与包含问号的文件有关。
解决方案 19:
以下代码对我而言有效:
df = pd.read_csv(文件名,sep ='\t',编码='cp1252')
解决方案 20:
如果可能,请在文本编辑器中打开文件并尝试将编码更改为 UTF-8。否则,请在操作系统级别以编程方式执行此操作。
扫码咨询,免费领取项目管理大礼包!