【问题标题】:read \xHH escapes from file as raw binary in Python读取 \xHH 作为 Python 中的原始二进制文件从文件中转义
【发布时间】:2016-05-01 18:24:58
【问题描述】:

我有以下问题:

我想从文件中读取原始二进制字符串:

文件看起来像这样(带有转义字符,而不是二进制数据):

\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52

使用的代码:

data = open("文件名", "rb").read()

得到的结果:

b"\\xfc\\xe8\\x82\\x00\\x00\\x00\\x60\\x89\\xe5\\x31\\xc0\\x64\\x8b\\x50\\x30 \\x8b\\x52"

带有双引号。

如何将其读取为二进制字符串,例如:\xaa 字符? (没有转义字符)

【问题讨论】:

  • 你的文件是你所说的二进制文件,还是 实际上你展示给我们的,你想要解释的 ascii是吗?
  • 字符串被正确读取,反斜杠在 python 字符串中使用 '\\' 转义序列表示。当您打印未格式化的字符串(带有 b"" 前缀)时,会显示转义序列字符。在问题中添加更多详细信息,说明您计划如何使用该字符串以获得更多有用的答案
  • 这是一个简单的 txt 文件,对不起。

标签: python file raw-data


【解决方案1】:

好的。你的问题是你问错了问题。您的数据文件不是原始二进制字符串,它是编码的,用转义字符编码。但是,当您需要解码转义时,您将其作为原始二进制文件读取。试试

data = open("filename", "r", encoding='unicode_escape').read().encode('raw_unicode_escape')

相反。

编辑:好的,现在可以了。您需要编码为 raw_unicode_escape,而不是 utf-8(默认)。

【讨论】:

  • 是的,我的问题是错误的,对此感到抱歉。但是您的解决方案有效。非常感谢。
【解决方案2】:

这个输出没问题

Python 正在输出这个带有双反斜杠的数据,以表明它是不可打印的。但是,它以字节的形式正确存储

【讨论】:

  • 不完全是,当我想使用它时,我遇到了错误。如果我在我的代码中添加以下内容: data = b"\xaa\xaa\xaa" 有效,但是当我从上面的文件中读取它时,我得到了错误
  • @Symonen,哪一个??
  • 不要混淆b'\\xfc'(4字节)和b'\xfc'(1字节)。
【解决方案3】:

要将文件中的 4 个 ascii 字符 (\ x f c) 转换为单个字节 (252==0xfc),您可以将 ascii 字符读取为字节 (data = open("filename", "rb").read()),删除 @987654327 @ 前缀并将生成的十六进制字节串转换为包含相应原始二进制数据的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 字节)。

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2011-12-26
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多