Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HEX decoding in Python 3.2

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?

like image 344
ovgolovin Avatar asked Jul 08 '12 16:07

ovgolovin


1 Answers

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().

like image 75
Sven Marnach Avatar answered Nov 11 '22 21:11

Sven Marnach