Python 打开 UTF-16 文件读取每个字节
Python Opening UTF-16 file read each byte
我正在尝试解析一个我认为是 UTF-16 编码的文件(文件魔法是 0xFEFF),我可以按需要打开该文件:
f = open(file, 'rb')
但是当我这样做时
print f.read(40)
它打印文件的实际 unicode 字符串,我想在其中访问十六进制数据并逐字节读取该文件。这可能是一个愚蠢的问题,但我一直无法找到如何做到这一点。
另外,作为后续问题。一旦我开始工作,我想解析文件以查找一组特定的字节,在这种情况下:
0x00 00 00 43 00 00 00
找到该模式后,开始解析条目。完成此任务的最佳方法是什么?我正在考虑使用生成器来遍历每个字节,一旦出现这种模式,就产生字节直到该模式的下一个实例?有没有更有效的方法来做到这一点?
编辑:我正在使用 Python 2.7
你不应该这样做吗
string = 'string'
>>> hex(ord(string[1]))
'0x74'
hexString = ''
with open(filename) as f:
while True:
#char = f.read(1)
chars = f.read(40)
hexString += ''.join(hex(ord(char) for char in chars)
if not chars:
break
想要十六进制的字符串,可以通过binascii.hexlify()
:
with open(filename, 'rb') as f:
raw = f.read(40)
hexadecimal = binascii.hexlify(raw)
print(hexadecimal)
(这也适用于 Python 3)
如果需要每个字节的数值,可以在字符串上调用ord()
on each element, or equivalently, map()
函数:
with open(filename, 'rb') as f:
raw = f.read(40)
byte_list = map(ord, raw)
print byte_list
(这不适用于 Python 3,但在 3.x 上,您可以直接迭代 raw
)
我正在尝试解析一个我认为是 UTF-16 编码的文件(文件魔法是 0xFEFF),我可以按需要打开该文件:
f = open(file, 'rb')
但是当我这样做时
print f.read(40)
它打印文件的实际 unicode 字符串,我想在其中访问十六进制数据并逐字节读取该文件。这可能是一个愚蠢的问题,但我一直无法找到如何做到这一点。
另外,作为后续问题。一旦我开始工作,我想解析文件以查找一组特定的字节,在这种情况下:
0x00 00 00 43 00 00 00
找到该模式后,开始解析条目。完成此任务的最佳方法是什么?我正在考虑使用生成器来遍历每个字节,一旦出现这种模式,就产生字节直到该模式的下一个实例?有没有更有效的方法来做到这一点?
编辑:我正在使用 Python 2.7
你不应该这样做吗
string = 'string'
>>> hex(ord(string[1]))
'0x74'
hexString = ''
with open(filename) as f:
while True:
#char = f.read(1)
chars = f.read(40)
hexString += ''.join(hex(ord(char) for char in chars)
if not chars:
break
想要十六进制的字符串,可以通过binascii.hexlify()
:
with open(filename, 'rb') as f:
raw = f.read(40)
hexadecimal = binascii.hexlify(raw)
print(hexadecimal)
(这也适用于 Python 3)
如果需要每个字节的数值,可以在字符串上调用ord()
on each element, or equivalently, map()
函数:
with open(filename, 'rb') as f:
raw = f.read(40)
byte_list = map(ord, raw)
print byte_list
(这不适用于 Python 3,但在 3.x 上,您可以直接迭代 raw
)