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