Windows上のPythonのbase64 png
質問
WindowsでPythonを使用してpng画像をbase64にエンコードするにはどうすればよいですか
iconfile = open("icon.png")
icondata = iconfile.read()
icondata = base64.b64encode(icondata)
上記はLinuxおよびOSXで正常に機能しますが、Windowsでは最初の数文字をエンコードしてから短縮します。これはなぜですか?
解決
open("icon.png", "rb")
私はWindowsにあまり詳しくありませんが、ファイルにテキストモードで開かれた場合、Windowsはファイルの末尾として解釈します(レガシーな理由により)。もう1つの問題は、Windowsでテキストモード(「b」なし)でファイルを開くと行末が書き換えられるため、通常、これらの文字が実際に行の終わりを示さないバイナリファイルが破損することです。
他のヒント
Milesからの回答を増やすために、 PNGファイルの最初の8バイトは特別に設計されています:
- 89-最初のバイトはチェックです ビット8は取り除かれていません
- " PNG" -誰かにそれが PNG形式
- 0d 0a-DOSの行末 インジケータ、あったかどうかを確認する DOS-> unix変換
- 1a-DOSのファイルの終わり文字、 ファイルが開かれたことを確認するには バイナリモード
- 0a-UNIXの行末文字、 UNIX-> DOSがあったかどうかを確認します 変換
設計どおり、コードは1aで停止します。
所属していません StackOverflow