base64.b64encode()
の目的は、バイナリデータをASCIIセーフな「テキスト」に変換することです。ただし、メソッドはバイト型のオブジェクトを返します。
_>>> import base64
>>> base64.b64encode(b'abc')
b'YWJj'
_
単純にその出力とdecode()
を取得するのは簡単ですが、私の質問は、bytes
ではなくstr
を返すbase64.b64encode()
の重要性?
Base64.b64encode()関数の目的は、バイナリデータをASCIIセーフな「テキスト」に変換することです
Pythonはこれに同意しません-base64は意図的に binary transform として分類されています。
これは、Python 3での設計上の決定であり、バイトとテキストの分離を強制し、暗黙的な変換を禁止します。Pythonは、これに関してbytes.encode
tも存在するため、b'abc'.encode('base64')
はAttributeError
を発生させます。
言語が取る意見は、バイト文字列オブジェクトはalreadyエンコードされているというものです。バイトをテキストにエンコードするコーデックは、このパラダイムに適合しません。なぜなら、バイトドメインからテキストドメインに移動したいときは、decodeであるためです。 rot13
エンコーディングも、同じ理由で 標準エンコーディング のリストから追放されたことに注意してください。Python 3パラダイムに適切に適合しませんでした。
作成するパフォーマンス引数もあります。Python base64出力のデコードを自動的に処理します。これは、ASCIIエンコードバイナリ表現ですbinascii
モジュールのCコードによって生成され、Pythonテキストドメインのオブジェクト。実際にバイトが必要な場合、ASCIIに再びエンコードすることにより、デコードを元に戻す必要があります。これは無駄な往復であり、不必要な二重否定になります。テキストへのステップ。
b64encode()
がその出力で何をしたいのかを知ることは不可能です。
多くの場合、エンコードされた値をテキストとして扱いたい場合がありますが、他の多くの場合(たとえば、ネットワーク経由で送信する場合)、代わりにバイトとして扱いたい場合があります。
b64encode()
がわからないため、推測を拒否します。また、入力はbytes
であるため、暗黙的にstr
に強制されるのではなく、出力は同じ型のままです。
指摘したように、出力をstr
にデコードするのは簡単です。
_base64.b64encode(b'abc').decode('ascii')
_
...また、結果について明示的である。
余談ですが、base64.b64decode()
(注:decode、notencode)は、バージョン3.3以降str
を受け入れました。変更は やや物議を醸す でした。