Python 二进制转文本/字符串?

-1 投票
2 回答
1430 浏览
提问于 2025-04-18 11:37

我正在尝试用Python把一个可能是二进制的文件解析成文本或字符串。我不太确定这个文件的格式,所以我假设它是二进制的。基本上,这个文件是从微软的 regedit 导出的一个注册表键(*.reg)。如果我用 Notepad++ 打开这个键,我可以很容易地读取它。然而,如果我在Python中(特别是在iPython Notebook里)尝试逐行读取,就会出现一些乱码。下面是一个示例:

InFile = open("F:\Uninstallkey.reg","r")

for line in InFile:
    print "%r" % (line)

InFile.close()

输出:

'\xff\xfeW\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x00R\x00e\x00g\x00i\x00s\x00t\x00r\x00y\x00 \x00E\x00d\x00i\x00t\x00o\x00r\x00 \x00V\x00e\x00r\x00s\x00i\x00o\x00n\x00 \x005\x00.\x000\x000\x00\r\x00\n'
'\x00\r\x00\n'
'\x00[\x00H\x00K\x00E\x00Y\x00_\x00L\x00O\x00C\x00A\x00L\x00_\x00M\x00A\x00C\x00H\x00I\x00N\x00E\x00\\\x00S\x00O\x00F\x00T\x00W\x00A\x00R\x00E\x00\\\x00M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00\\\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00\\\x00C\x00u\x00r\x00r\x00e\x00n\x00t\x00V\x00e\x00r\x00s\x00i\x00o\x00n\x00\\\x00U\x00n\x00i\x00n\x00s\x00t\x00a\x00l\x00l\x00]\x00\r\x00\n'
'\x00\r\x00\n'

在Notepad++中:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall]

奇怪的是,在iPython中它却能正常显示:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall]

长话短说,我该如何判断这个文件的格式,以及如何转换这个文件,以便我可以把它作为文本打印或解析呢?

2 个回答

2

这个文件看起来是一个普通的文本文件,只是用小端格式的UTF-16编码的。你不需要用普通的 open 函数来打开这个文件,而是应该用 io.open,并且在打开的时候加上一个 encoding 参数,值为 "UTF-16LE"

3

如上所述,这个文件是用utf-16编码的。下面是一个简单的方法来打开带有特定编码的文件:

import codecs
InFile = codecs.open(path_to_registry, encoding='utf-16')

撰写回答