Windows上的python中的base64 png

dir*_*ion 11 python windows base64

如何在Windows上使用python将png图像编码为base64?

iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)
Run Code Online (Sandbox Code Playgroud)

以上在Linux和OSX中工作正常,但在Windows上它将编码前几个字符然后缩短.为什么是这样?

Mil*_*les 26

以二进制模式打开文件:

open("icon.png", "rb")
Run Code Online (Sandbox Code Playgroud)

我对Windows并不是很熟悉,但我想现在发生的事情是该文件包含一个字符(0x1A),当文本模式打开时,Windows将其解释为文件的末尾(由于遗留原因).另一个问题是在Windows上以文本模式打开文件(没有'b')将导致行结尾被重写,这通常会破坏二进制文件,其中这些字符实际上并不表示行的结尾.


And*_*lke 9

为了增加Miles的答案,PNG文件中的前八个字节是专门设计的:

  • 89 - 第一个字节是检查第8位是否已被剥离
  • "PNG" - 让有人读到它是PNG格式
  • 0d 0a - DOS行结束指示符,用于检查是否存在DOS-> unix转换
  • 1a - DOS文件结束字符,用于检查文件是否以二进制模式打开
  • 0a - unix行尾字符,检查是否有unix-> DOS转换

您的代码按照设计停在1a处.