11

Windowsでpythonを使用してpng画像をbase64にエンコードするにはどうすればよいですか?

iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)

上記は Linux と OSX では問題なく動作しますが、Windows では最初の数文字をエンコードしてから短くします。どうしてこれなの?

4

2 に答える 2

26

バイナリ モードでファイルを開きます

open("icon.png", "rb")

私は Windows にあまり詳しくありませんが、テキスト モードで開いたときにWindows がファイルの末尾として解釈する文字 (0x1A) がファイルに含まれていることが原因だと思います(従来の理由から)。もう 1 つの問題は、Windows でファイルをテキスト モード (「b」なし) で開くと、行末が書き換えられ、通常、これらの文字が実際には行末を示していないバイナリ ファイルが破損することです。

于 2009-03-10T19:29:26.880 に答える
9

Miles からの回答を補強するために、PNG ファイルの最初の 8 バイトは特別に設計されています。

  • 89 - 最初のバイトは、ビット 8 が削除されていないことのチェックです
  • 「PNG」 - PNG 形式であることを誰かに読んでもらいます
  • 0d 0a - DOS の行末インジケータ。DOS から UNIX への変換が行われたかどうかを確認します。
  • 1a - DOS のファイル終了文字。ファイルがバイナリ モードで開かれたことを確認します。
  • 0a - unix の行末文字。unix から DOS への変換があったかどうかを確認します。

設計どおり、コードは 1a で停止します。

于 2009-03-10T22:16:13.953 に答える