当编码未知时,是否应该以“wb”模式打开文件?

2024-09-24 00:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的测试映像遇到的问题是我喜欢称之为“看起来我们不支持此文件格式”的错误,因为当我打开映像时它会这样说。你知道吗

try:
    with open('GA-image test.png',encoding='utf8') as File:
        FileBytes = File.read(1000000000)
        TypeOfEncoding = 'utf8'
except:
    try:
        with open('GA-image test.png',encoding='Latin-1') as File:
            FileBytes = File.read(1000000000)
            TypeOfEncoding = 'Latin-1'
#To shorten this code I'm just going to give two of the types of encoding

with open('GA-image test2.png','wb') as FileW:
    print(TypeOfEncoding)
    FileBytes2 = str.encode(FileBytes)
    FileBytes3 = FileW.write(FileBytes2)

这是指向此代码和我使用的测试映像的链接: https://cdn.discordapp.com/attachments/496421060565139466/548261637782503425/Reading_and_writing_a_file_useing_file_bytes.zip


Tags: testimagereadpngaswithopenutf8
1条回答
网友
1楼 · 发布于 2024-09-24 00:22:46

图像数据不是文本,不要在文本模式下打开图像。不是为了读书,也不是为了写作。你知道吗

在Python中,使用mode参数中的tb以两种模式之一打开文件:文本模式和二进制模式。如果两者都不使用,则隐含t。你知道吗

文本模式仅仅是二进制模式之上的一个额外层,在这个层中,二进制数据使用standard text codec文本转换到。绝大多数图像格式,包括PNG,都不是文本格式,你不能用文本编解码器解码它们的数据。你知道吗

因此,请始终以二进制模式打开这些文件,并在文件模式中添加b字符:

with open('GA-image test.png', 'rb') as image_file:
    image_bytes = image_file.read()

with open('GA-image test2.png', 'wb') as output_file:
    output_file.write(image_bytes)

文本编解码器只是以一系列字节存储信息的一种形式,PNG等图像格式则是另一种形式,并不是设计为具有文本的意义。你总是可以把图像数据解码成拉丁语-1,这是一个巧合,拉丁语-1编解码器的设计是一个意外,并非故意的。你知道吗

附带说明:使用except通常是一个坏主意,因为它捕获所有异常,而不仅仅是打开文件时的错误或解码错误,而这些错误总是由于尝试将PNG数据读取为UTF-8而产生的。尽可能使用特定的异常。你知道吗

相关问题 更多 >