Python 3.x python编码()

Python 3.x python编码(),python-3.x,hex,encode,Python 3.x,Hex,Encode,python 3.3中是否排除了十六进制编解码器?当我写代码的时候 >>> s="Hallo" >>> s.encode('hex') Traceback (most recent call last): File "<pyshell#24>", line 1, in <module> s.encode('hex') LookupError: unknown encoding: hex >s=“你好” >>>s.encod

python 3.3中是否排除了十六进制编解码器?当我写代码的时候

>>> s="Hallo"
>>> s.encode('hex')
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    s.encode('hex')
LookupError: unknown encoding: hex
>s=“你好”
>>>s.encode('hex')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
s、 编码('hex')
LookupError:未知编码:十六进制
这是什么意思?我知道binascii.hexlify()但仍然知道.encode()方法很好! 有什么建议吗?

没有,使用
encode()
对hexlify不好

使用
hex
编解码器的方法在Python2中起作用,因为您可以在Python2中对8位字符串调用
encode()
,即您可以对已经编码的内容进行编码。那没有道理
encode()
用于将Unicode字符串编码为8位字符串,而不是将8位字符串编码为8位字符串

在Python 3中,您不能再对8位字符串调用
encode()
,因此
hex
编解码器变得毫无意义并被删除

虽然从理论上讲,您可以使用
hex
编解码器并像这样使用它:

>>> import codecs
>>> hexlify = codecs.getencoder('hex')
>>> hexlify(b'Blaah')[0]
b'426c616168'
使用binascii更简单、更好:

>>> import binascii
>>> binascii.hexlify(b'Blaah')
b'426c616168'

这与上面的答案相同,但我对其进行了修改,使其与Python3一起工作

import binascii
from Crypto.Cipher import AES
from Crypto import Random

def encrypt(passwrd, message):
    msglist = []
    key = bytes(passwrd, "utf-8")
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(key, AES.MODE_CFB, iv)
    msg = iv + cipher.encrypt(bytes(message, "utf-8"))
    msg = binascii.hexlify(msg)
    for letter in str(msg):
        msglist.append(letter)
    msglist.remove("b")
    msglist.remove("'")
    msglist.remove("'")
    for letter in msglist:
        print(letter, end="")
    print("")

def decrypt(passwrd, message):
    msglist = []
    key = bytes(passwrd, "utf-8")
    iv = Random.new().read(AES.block_size)
    cipher = AES.new(key, AES.MODE_CFB, iv)
    msg = cipher.decrypt(binascii.unhexlify(bytes(message, "utf-8")))[len(iv):]
    for letter in str(msg):
        msglist.append(letter)
    msglist.remove("b")
    msglist.remove("'")
    msglist.remove("'")
    for letter in msglist:
        print(letter, end="")
    print("")

有这么多,“十六进制”代码丢失了!有没有办法添加该编解码器或方法,链接上有两个文件,这有什么作用?要转换十六进制数,您仍然可以使用
hex(n)
。binascii.hexlify()需要缓冲区接口,对吗?那么,有人能给我解释一下如何在缓冲区接口上执行格式化吗?@iMagur:对不起,我忘了编写Python 3代码,因为我是在Python 2中编写的(因为Python 3中不存在十六进制编解码器)。这个问题现在已经解决了。上面的binascii代码在Python3中工作,并向您展示了如何执行此操作。在Python3中,字符串是Unicode的,因此不能直接进行十六进制编码,首先需要将它们编码为
字节。特别是在('ascii')、('IBM500')、('IBM037')之间。真正需要的是一些用于字符串的“OD”样式的十六进制方法。选择Python是为了减少工作量,这些东西使所需的代码增加了一倍。。是的,我知道IBM500是unicode。。