在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)
根据docs hex_codec
应该提供“字节到字节的映射”。所以这里正确使用了字节串的对象。
如何摆脱此错误,以避免从十六进制编码的文本转换的难以处理的变通方法?
答案 0 :(得分:10)
在Python 3中,bytes.decode()
方法用于将原始字节解码为Unicode,因此您必须使用codecs
或codecs.getdecoder()
从codecs.decode()
模块获取解码器对于bytes
- 到 - bytes
编码:
>>> codecs.decode(b"4f6c6567", "hex_codec")
b'Oleg'
>>> codecs.getdecoder("hex_codec")(b"4f6c6567")
(b'Oleg', 8)
文档中似乎缺少后一个函数,但它有一个有用的文档字符串。
您可能还想查看binascii.unhexlify()
。