在 Python 中读取 \xHH 作为原始二进制文件从文件中转义
read \xHH escapes from file as raw binary in Python
我有以下问题:
我想从文件中读入原始二进制字符串:
文件看起来像这样(带有转义字符,不是二进制数据):
\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52
使用的代码:
data = open("filename", "rb").read()
获得的结果:
b"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52"
双倍\.
如何将其读作二进制字符串,例如:\xaa
个字符?
(没有转义字符)
此输出 正常。
Python 是 输出 此数据,带有双反斜杠以表明它 不可打印 。但是,它 正确存储 为字节。
好的。你的问题是你问错了问题。您的数据文件不是原始二进制字符串,而是经过编码的字符串,使用转义字符进行编码。但是,当您需要解码转义符时,您正在将其作为原始二进制文件读取。尝试
data = open("filename", "r", encoding='unicode_escape').read().encode('raw_unicode_escape')
相反。
编辑:好的,现在可以了。您需要编码为 raw_unicode_escape,而不是 utf-8(默认值)。
要将文件中的 4 个 ascii 字符 (\
x
f
c
) 转换为单个字节 (252==0xfc
),您可以读取 ascii字符作为字节 (data = open("filename", "rb").read()
),删除 \x
前缀并将生成的十六进制字节串转换为包含相应原始二进制数据的 bytes
:
>>> import binascii
>>> data = b'\xfc\xe8\x82'
>>> binascii.unhexlify(data.replace(b'\x', b''))
b'\xfc\xe8\x82'
最好避免首先将数据存储为 b'\xfc'
(4 个字节)而不是 b'\xfc'
(1 个字节)。
我有以下问题:
我想从文件中读入原始二进制字符串:
文件看起来像这样(带有转义字符,不是二进制数据):
\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52
使用的代码:
data = open("filename", "rb").read()
获得的结果:
b"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52"
双倍\.
如何将其读作二进制字符串,例如:\xaa
个字符?
(没有转义字符)
此输出 正常。
Python 是 输出 此数据,带有双反斜杠以表明它 不可打印 。但是,它 正确存储 为字节。
好的。你的问题是你问错了问题。您的数据文件不是原始二进制字符串,而是经过编码的字符串,使用转义字符进行编码。但是,当您需要解码转义符时,您正在将其作为原始二进制文件读取。尝试
data = open("filename", "r", encoding='unicode_escape').read().encode('raw_unicode_escape')
相反。
编辑:好的,现在可以了。您需要编码为 raw_unicode_escape,而不是 utf-8(默认值)。
要将文件中的 4 个 ascii 字符 (\
x
f
c
) 转换为单个字节 (252==0xfc
),您可以读取 ascii字符作为字节 (data = open("filename", "rb").read()
),删除 \x
前缀并将生成的十六进制字节串转换为包含相应原始二进制数据的 bytes
:
>>> import binascii
>>> data = b'\xfc\xe8\x82'
>>> binascii.unhexlify(data.replace(b'\x', b''))
b'\xfc\xe8\x82'
最好避免首先将数据存储为 b'\xfc'
(4 个字节)而不是 b'\xfc'
(1 个字节)。