7

Python 2.x では、これを行うことができます。

>>> '4f6c6567'.decode('hex_codec')
'Oleg'

しかし、Python 3.2 では、次のエラーが発生します。

>>> b'4f6c6567'.decode('hex_codec')
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    b'4f6c6567'.decode('hex_codec')
TypeError: decoder did not return a str object (type=bytes)

ドキュメント によると、hex_codec「バイトからバイトへのマッピング」を提供する必要があります。したがって、ここでは byte-string のオブジェクトが正しく使用されています。

16 進数でエンコードされたテキストから変換するための扱いにくい回避策を回避できるように、このエラーを取り除くにはどうすればよいですか?

4

1 に答える 1

11

Python 3では、このbytes.decode()メソッドを使用して生のバイトをUnicodeにデコードするため、次を使用して、またはエンコード用にcodecsモジュールからデコーダーを取得する必要があります。codecs.getdecoder()codecs.decode()bytesbytes

>>> codecs.decode(b"4f6c6567", "hex_codec")
b'Oleg'
>>> codecs.getdecoder("hex_codec")(b"4f6c6567")
(b'Oleg', 8)

後者の関数はドキュメントにないようですが、便利なdocstringがあります。

もご覧くださいbinascii.unhexlify()

于 2012-07-08T16:07:34.920 に答える