【问题标题】:HEX decoding in Python 3.2Python 3.2 中的十六进制解码
【发布时间】:2012-07-08 16:05:13
【问题描述】:

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

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

【问题讨论】:

    标签: python python-3.x codec


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗯。那为什么 AttributeError 不上升呢?
    • @ovgolovin:对不起,我很困惑。现已更正。
    • 谢谢!我认为 Python 生成的错误消息应该更有说服力,因为现在还不清楚到底出了什么问题。
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 2016-04-17
    • 2019-07-15
    • 2020-08-28
    • 2014-12-28
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    相关资源
    最近更新 更多