Python编码/解码为十六进制不再可用

示例

Python 2.x 2.7
"1deadbeef3".decode('hex')
# 输出:'\ x1d \ xea \ xdb \ xee \ xf3'
'\x1d\xea\xdb\xee\xf3'.encode('hex')
# 出:1deadbeef3
Python 3.x 3.0
"1deadbeef3".decode('hex')
# 追溯(最近一次通话):
#   File "<stdin>", line 1, in <module>
# AttributeError:“ str”对象没有属性“ decode”

b"1deadbeef3".decode('hex')
# 追溯(最近一次通话):
#   File "<stdin>", line 1, in <module>
#LookupError:“十六进制”不是文本编码;使用codecs.decode()处理任意编解码器

'\x1d\xea\xdb\xee\xf3'.encode('hex')
# 追溯(最近一次通话):
#   File "<stdin>", line 1, in <module>
#LookupError:“十六进制”不是文本编码;使用codecs.encode()处理任意编解码器

b'\x1d\xea\xdb\xee\xf3'.encode('hex')
# 追溯(最近一次通话):
#  File "<stdin>", line 1, in <module>
# AttributeError:“字节”对象没有属性“编码”

但是,如错误消息所建议,您可以使用该codecs模块来实现相同的结果:

import codecs
codecs.decode('1deadbeef4', 'hex')
# 出:b'\ x1d \ xea \ xdb \ xee \ xf4'
codecs.encode(b'\x1d\xea\xdb\xee\xf4', 'hex')
# 出:b'1deadbeef4'

注意,codecs.encode返回一个bytes对象。要获取str仅decodeASCII的对象:

codecs.encode(b'\x1d\xea\xdb\xee\xff', 'hex').decode('ascii')
# 出:'1deadbeeff'