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应该提供“字节到字节的映射”。所以这里正确使用了字节串的对象。

我怎样才能摆脱这个错误,以避免笨拙的变通办法从十六进制编码的文本转换?

4

1 回答 1

11

在 Python 3 中,该bytes.decode()方法用于将原始字节解码为 Unicode,因此您必须使用或用于-to-编码从codecs模块中获取解码器:codecs.getdecoder()codecs.decode()bytesbytes

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

文档中似乎缺少后一个函数,但有一个有用的文档字符串。

您可能还想看看binascii.unhexlify().

于 2012-07-08T16:07:34.920 回答