在Python 3中,将包含十六进制字符的字符串转换为字节的方法

3

我有一个包含可打印和不可打印字符的字符串,例如:

'\xe8\x00\x00\x00\x00\x60\xfc\xe8\x89\x00\x00\x00\x60\x89'

在Python 3中,将此内容转换为bytes对象,最具有“Python风格”的方法是什么:

b'\xe8\x00\x00\x00\x00`\xfc\xe8\x89\x00\x00\x00`\x89'

所有字符都在0-255范围内吗? - Martijn Pieters
1个回答

4
如果你的所有代码点都在U+0000到U+00FF范围内,你可以使用Latin-1编码:
inputstring.encode('latin1')

由于Unicode的前255个码点与Latin-1标准中的字节一一对应,因此这是目前最快的方法。

然而,对于输入字符串中该范围外的任何字符,此方法均不适用。

基本上,如果你的Unicode包含本不应该被解码的“字节”,则将其编码为Latin-1以再次获取原始字节。

演示:

>>> '\xe8\x00\x00\x00\x00\x60\xfc\xe8\x89\x00\x00\x00\x60\x89'.encode('latin1')
b'\xe8\x00\x00\x00\x00`\xfc\xe8\x89\x00\x00\x00`\x89'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接