Python 2.7 Python3中的Python2 str.decode(';hex';)?

Python 2.7 Python3中的Python2 str.decode(';hex';)?,python-2.7,python-3.x,encoding,character-encoding,Python 2.7,Python 3.x,Encoding,Character Encoding,我想通过python中的套接字将十六进制编码的数据发送到另一个客户机。不久前,我用python 2完成了所有工作。现在我想把它移植到python 3 数据如下所示: """ 16 03 02 """ 然后我使用此函数将其转换为字符串: x.replace(' ', '').replace('\n', '').decode('hex') 然后看起来是这样的(顺便说一下,这是一个str类型): 现在,我在python 3中找到了这一点: codecs.decode('160302', 'hex'

我想通过python中的套接字将十六进制编码的数据发送到另一个客户机。不久前,我用python 2完成了所有工作。现在我想把它移植到python 3

数据如下所示:

""" 16 03 02 """
然后我使用此函数将其转换为字符串:

x.replace(' ', '').replace('\n', '').decode('hex')
然后看起来是这样的(顺便说一下,这是一个str类型):

现在,我在python 3中找到了这一点:

codecs.decode('160302', 'hex')
但它返回另一种类型:

b'\x16\x03\x02'
由于我编码的所有内容都不是正确的语言,所以我不能使用utf-8或某些解码器,因为其中包含无效字节(例如。\x00、\xFF)。关于如何像python 2中一样再次转义字符串解决方案,有什么想法吗

谢谢

a = """ 16 03 02 """.encode("utf-8")
#Send things over socket
print(a.decode("utf-8"))

为什么不使用UTF-8编码,使用套接字发送,然后再次使用UTF-8解码?

python 3中的“str”对象不是字节序列,而是unicode码点序列

如果“发送数据”是指调用
send
,那么
bytes
是正确的类型

如果您确实需要字符串(不是3个字节,而是12个unicode代码点):


请注意,为了在代码中表示它们,需要将反斜杠加倍。

对于Python2和Python3有一个标准解决方案。无需进口:

十六进制字符串=“16 03 02”
某些字节=bytearray.fromhex(十六进制字符串)

在python3中,您可以将其视为str(切片、迭代等),也可以添加字节字符串:
b'\x00'
b'text'
字节('text','utf8')

您还提到了要编码“utf-8”的内容。因此,您可以通过以下方式轻松完成:
一些字节。encode()

正如你所看到的,你不需要清洁它。这个功能非常有效。如果您想返回十六进制字符串:
一些字节。hex()
会帮您完成

a = """ 16 03 02 """.encode("utf-8")
#Send things over socket
print(a.decode("utf-8"))
>>> import codecs
>>> s = str(codecs.decode('16ff00', 'hex'))[2:-1]
>>> s
'\\x16\\xff\\x00'
>>> print(s)
\x16\xff\x00