使用PIL模块的UnicodeDecodeError

时间:2018-11-06 22:28:12

标签: python python-3.x python-imaging-library

我收到此错误消息:

/Chris

通过此代码:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

不知道为什么,因为昨天它起作用了...

3 个答案:

答案 0 :(得分:2)

正如其他人所说,这是因为open试图以文本形式读取文件。但是,您可以通过直接使用Image.open()

打开路径来解决此问题
img = Image.open('pictures/' + filename)

为方便起见,它将直接接受文件路径并为您进行相关处理;在这里查看其文档以了解更多!
https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.open

此外,使用Image.open作为上下文管理器来处理完成后打开和关闭图像(there's a good explanation here

可能更有意义。
with Image.open('pictures/' + filename) as img:
    # process img
# closed when leaves scope

答案 1 :(得分:0)

我认为您需要以二进制模式打开文件:

image_file = open('pictures/' +filename, 'rb')

答案 2 :(得分:0)

在不使用任何其他参数的情况下使用open(filename)函数时,将以“文本”模式打开文件。

Python将在读取文件时假定该文件包含文本。当它找到一个值为255(0xFF)的字节时,就会感到困惑,因为没有文本字符与该字节匹配。

要解决此问题,请以字节模式打开文件:

open(filename, "b")

这告诉python不要假定它包含文本,而文件句柄只会给出原始字节。

因为这是一个常见用例,所以PIL已经按内置的文件名打开了图像:

Image.open(filename)