Python 3.1.1string到hex
我想使用str.encode()但我得到 
 >>> "hello".encode(hex) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be string, not builtin_function_or_method 
我已经尝试了一些变体,他们似乎都在Python 2.5.2中工作,所以我需要做些什么来让他们在Python 3.1中工作?
  hex编解码器已经被3.x. 改用binascii : 
 >>> binascii.hexlify(b'hello') b'68656c6c6f' 
你已经有了一些很好的答案,但是我认为你也可能对这个背景有点兴趣。
首先,你错过了报价。 它应该是:
 "hello".encode("hex") 
其次,这个编解码器还没有被移植到Python 3.1。 看到这里 。 看来,他们还没有决定这些编解码器是否应该包含在Python 3中,或者以不同的方式实现。
如果您查看附加到该错误的diff文件 ,您可以看到实现它的build议方法:
 import binascii output = binascii.b2a_hex(input) 
binascii方法顺便说一下
 >>> import binascii >>> x=b'test' >>> x=binascii.hexlify(x) >>> x b'74657374' >>> y=str(x,'ascii') >>> y '74657374' >>> x=binascii.unhexlify(x) >>> x b'test' >>> y=str(x,'ascii') >>> y 'test' 
希望能帮助到你。 🙂
  base64.b16encode和base64.b16decode将字节转换为hex数据,并且可以跨越所有Python版本。  编解码器的方法也可以,但在Python 3中并不那么简单。 
 在Python 3中,所有string都是unicode。 通常,如果将unicode对象编码为string,则使用.encode('TEXT_ENCODING') ,因为hex不是文本编码,所以应该使用codecs.encode()来处理任意编解码器。 例如: 
 >>>> "hello".encode('hex') LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs >>>> import codecs >>>> codecs.encode(b"hello", 'hex') b'68656c6c6f' 
 同样,由于“hello”是unicode,所以在编码为hex之前,您需要将其指定为一个字节string。 这可能会更符合您使用encode方法的原始方法。 
  binascii.hexlify和codecs.encode的区别如下: 
- 
binascii.hexlify 二进制数据的hex表示。 返回值是一个字节对象。 types:builtin_function_or_method 
- 
codecs.encode encode(obj,[encoding [,errors]]) – > object 使用为编码注册的编解码器编码obj。 编码默认为默认编码。 可能会给出错误来设置不同的error handlingscheme。 缺省值是'strict',这意味着编码错误会引发ValueError。 其他可能的值是'ignore','replace'和'xmlcharrefreplace'以及其他可以处理ValueErrors的用codecs.register_error注册的名字。 types:builtin_function_or_method 
 在Python 3中,将string编码为字节,并使用hex()方法返回一个string。 
 s = "hello".encode("utf-8").hex() s # '68656c6c6f' 
可以select将string转换回字节:
 b = bytes(s, "utf-8") b # b'68656c6c6f'