我想使用utf-8在字节数组中编码一个字符串。例如,对于字符串"CD",我要获取b"\x43\x44"。我已经尝试过了,但是没有用:

def toTab(strMessage):
    return strMessage.encode('utf-8')


我得到b'CD',这不是我想要的结果。

最佳答案

从Python 2到3的主要变化之一是str数据类型。关于here的更多信息。基本上,它们一直在努力使可读性始终保持可读性,这在尝试将十六进制值保留在字符串中时可能会导致一些有趣而令人沮丧的事情。字符串前面的b告诉python,它已经被编码,因此您的函数实际上正在工作,但以易于阅读的形式显示。为了显示这一点,只需尝试:

b'CD'.hex()


或者,更具体地说:

'CD'.encode().hex()


这使:

'4344'


编辑:为澄清起见,python str始终将ASCII表示为ASCII。可以通过在控制台中输入以下内容来显示:

"résumé".encode("utf-8")


这将产生:

b'r\xc3\xa9sum\xc3\xa9'


请注意,所有ASCII均以这种方式呈现,非ASCI则以字节表示。还要注意一些关键,UTF-8字符可以用1到4个字节(其中一个字节是8位)的任何形式表示。另一方面,整个ASCII集只能用7位表示,而将所有ASCII字节填充为零。

同样,您的输出是b'\x43\x44',它在视觉上只是表示为b'CD'。如果将其传递给c程序以利用缓冲区溢出,则可以根据需要将字符串识别为b'\x43\x44'

要显示此内容,请尝试:

if b'\x43\x44' == b'CD':
    print(True, b'\x43\x44')
else:
    print(False)


将打印:True b'CD'

09-10 07:33
查看更多