1

base 64 でテキストをデコードしようとしていますが、それをしようとしているときにエラーが発生する理由がわかりません。

b'Zm9v'.decode('base64_codec')

発生する例外は次のとおりです。TypeError: expected bytes, not memoryview

PS: モジュールを使用する代替手段があることは知っていbase64ます。しかし、好奇心から答えを知りたいと思っています。

ありがとう!

4

1 に答える 1

3

残念ながら、bytes.decode()andstr.encode()メソッドは (当然のことながら) タイプ間の変換も行うコーデックのみをサポートします。常にオブジェクトを返すbytes.decode()必要がありますが、返す必要があります。これらのコーデックを導入した元の問題を参照してください。strstr.encode()bytes

コーデックは任意の型で動作できます。これは、Unicode およびバイト オブジェクトのヘルパー メソッドが Python 3.x の型の 1 つの組み合わせしかサポートしていないということです。

bytes.decode()したがって、表示される特定のエラーは、メソッドが常に type の値を返すことを期待しているという事実によって引き起こされますstr。同様に、このメソッドは、戻り値としてstr.encode()返されないコーデックを無効にします。bytes

>>> 'Ceasar'.encode('rot_13')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: encoder did not return a bytes object (type=str)

そのため、bytes-to-bytes および str-to-str コーデックの場合、codecsモジュールを直接使用する必要があります。

import codecs

codecs.getdecoder('base64_codec')(b'Zm9v')[0]
于 2013-04-16T13:09:45.817 に答える