web-dev-qa-db-ja.com

Python 3およびバイナリファイルのbase64エンコーディング

私はPython=に不慣れですが、私を悩ませている問題があります。

次のコードを使用して、Zipファイルのbase64文字列表現を取得します。

with open( "C:\\Users\\Mario\\Downloads\\exportTest1.Zip",'rb' ) as file:
    zipContents = file.read()
    encodedZip = base64.encodestring(zipContents)

ここで、文字列を出力すると、b ''表現の中に含まれます。これは私にとっては必要ないので避けたいです。また、別の問題である76文字ごとに改行文字が追加されます。バイナリコンテンツを取得して、改行文字と後続および先頭のbなしでそれを表す方法はありますか?

比較のために、PowerShellで次のようにすると、

$fileName = "C:\Users\Mario\Downloads\exportTest1.Zip"
$fileContentBytes = [System.IO.File]::ReadAllBytes($fileName)
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes) 

私が探している正確な文字列を取得します。b ''も\ nも76文字ごとにありません。

10
Mario Majcica

base64パッケージdoc: から

_base64.encodestring:_

"バイトのようなオブジェクトsをエンコードします。これには任意のバイナリデータを含めることができ、base64でエンコードされたデータを含むbytesを返し、改行(_b"\n"_)を挿入します出力の76バイトごとに、RFC 2045(MIME)に従って、後続の改行があることを確認します。 "

使いたい

_base64.b64encode:_

"Base64を使用してバイトのようなオブジェクトをエンコードし、エンコードされたbytesを返します。"

例:

_import base64

with open("test.Zip", "rb") as f:
    encodedZip = base64.b64encode(f.read())
    print(encodedZip.decode())
_

decode()は、バイナリ文字列をテキストに変換します。

17
Simon Kirsten

_b64encode_を使用して改行なしでエンコードし、結果のバイナリ文字列を.decode('ascii')でデコードして通常の文字列を取得します。

_encodedZip = base64.b64encode(zipContents).decode('ascii')
_
8
gre_gor