繁体   English   中英

如何使用 utf-8 将字符串编码为字节数组?

[英]How to encoding a string into a bytearray using utf-8?

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

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

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

从 Python 2 到 3 的主要变化之一是 str 数据类型。 更多关于这里 基本上,它们总是尽最大努力使人类可读,当试图将十六进制值保存在字符串中时,这可能会导致一些有趣和令人沮丧的事情。 字符串前面的 b 告诉 python 它已编码,因此您的 function 实际上正在工作,但它显示为人类可读。 要显示这一点,只需尝试:

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 字节都用零填充。

同样,您的 output 是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'

您可以通过手动组合和格式化 bytearray 的每个字节来获得所需的内容。

def toTab(strMessage):
    return 'b"{}"'.format(''.join(r'\x{:0x}'.format(b) for b in strMessage))

msg = b"\x43\x44"
print(toTab(msg))  # -> b"\x43\x44"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM