2009-03-10 14 views
11

Windows上でpythonを使用してpngイメージをbase64にエンコードするにはどうすればよいですか?Windowsのpythonでbase64 png

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

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

答えて

26

Open the file in binary mode

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

私は、Windowsに非常に慣れていないんだけど、私は何が起こっているのか想像するファイルが(レガシーの理由から)Windows is interpreting as the end of the fileは、それが開かれたことを文字(0x1A)が含まれていることですテキストモード。もう1つの問題は、Windows上でテキストモード( 'b'なし)でファイルを開くと行末が書き直されることです。この行末は、通常、行の終わりを示さないバイナリファイルを破棄します。

+0

+1です。 – Brian

+0

彼は確かに正解です、linux/osxでそれがなくてもうまくいかない方法 – directedition

+0

Linus/OSXはバイナリファイルとテキストファイルを同じ扱いにしますが、Windowsはバイナリファイルとは異なるテキストファイルを扱います。また、正しい答えとしてマークするには、彼の答えの横にあるチェックボックスをクリックする必要があります。 – Powerlord

9

マイルからの回答を強化するためには、first eight bytes in a PNG fileは特別に設計されています

  • 89 - 誰かが読んで聞かせて - 最初のバイトは ビット8が
  • 「PNG」取り除かれていないことをチェックですDOS用の行末 インジケータ、 DOS-> UNIX変換
  • 1Aがあったかどうかを確認するために - - DOSのファイル終了文字は、それが PNG形式
  • 0 D 0Aだことあなたのコードがで停止し、UNIX> DOS 変換

があった場合 チェックするには、UNIXの行末文字、 -

  • 0Aファイルが バイナリモードで開かれたことを確認するアクター、 設計通りの1a。

  • 関連する問題