从包含十六进制字符的字符串转换为python 3中的字节

时间:2014-02-24 20:53:34

标签: python python-3.x unicode byte

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

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

在Python 3中将此转换为bytes对象的最“pythonesque”方法是什么,即:

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

1 个答案:

答案 0 :(得分:4)

如果您的所有代码点都在U + 0000到U + 00FF的范围内,则可以编码为Latin-1:

inputstring.encode('latin1')

作为Unicode的前255个代码点,一对一映射到Latin-1标准中的字节。

这是迄今为止最快的方法,但不适用于该范围之外的输入字符串中的任何字符。

基本上,如果您的Unicode包含不应该被解码的'bytes',请编码为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'