我正在尝试使用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
顺便说一句,binascii方法更容易
import binascii
output = binascii.b2a_hex(input)
希望有帮助。 :)
在Python 3.5+中,将字符串编码为字节并使用>>> 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'
方法,返回一个字符串。
hex()
(可选地,将字符串转换回字节:
s = "hello".encode("utf-8").hex()
s
# '68656c6c6f'
在Python 3中,所有字符串都是unicode。通常,如果将unicode对象编码为字符串,则使用b = bytes(s, "utf-8")
b
# b'68656c6c6f'
,因为.encode('TEXT_ENCODING')
不是文本编码,所以应使用hex
处理任意编解码器。例如:
codecs.encode()
同样,由于“ hello”是unicode,因此在编码为十六进制之前,需要将其表示为字节字符串。这可能与您最初使用>>>> "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'
方法的方式更加一致。
encode
和binascii.hexlify
之间的区别如下:
binascii.hexlify
二进制数据的十六进制表示。
返回值是一个字节对象。
类型:内建函数或方法
codecs.encode
encode(obj,[encoding [,errors]])->对象
使用注册用于编码的编解码器对obj进行编码。编码默认到默认编码。可能会给出错误以设置其他错误处理方案。默认值为“严格”,这意味着会出现编码错误ValueError。其他可能的值是'ignore','replace'和'xmlcharrefreplace'以及在此注册的任何其他名称可以处理ValueErrors的codecs.register_error。
类型:内建函数或方法
codecs.encode
和base64.b16encode
在字节之间来回转换字节,并在所有Python版本中工作。 base64.b16encode
也可以使用,但是在Python 3中不太直接。
在Python 3.5及更高版本中最简单的方法是:
base64.b16decode
如果您使用base64.b16decode
字符手动将字符串输入到Python解释器中,则可以通过在字符串之前键入codecs approach来更快地完成此操作:
>>> 'halo'.encode().hex() '68616c6f'
在Python 2.x中是等效的:
utf-8
使用hexlify-b
还有另一种方法: