HEX decoding in Python 3.2

codec, python, python-3.x

Solution

In Python 3, the `bytes.decode()` method is used to decode raw bytes to Unicode, so you have to get the decoder from the `codecs` module using `codecs.getdecoder()` or `codecs.decode()` for `bytes`-to-`bytes` encodings:

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

The latter function seems to be missing from the documentation, but has a useful docstring.

You might also want to have a look at `binascii.unhexlify()`.

Problem

In Python 2.x I'm able to do this: ``` >>> '4f6c6567'.decode('hex_codec') 'Oleg' ``` But in Python 3.2 I encounter this error: ``` >>> 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) ``` According to the docs `hex_codec` should provide "bytes-to-bytes mappings". So the object of byte-string is correctly used here. How can I get rid of this error to be able to avoid unwieldy workarounds to convert from hex-encoded text?

Original source