[英]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.