Python打开UTF-16文件读取每个字节

时间:2015-07-02 19:04:24

标签: python hex utf-16

我正在尝试解析一个我认为是UTF-16编码的文件(文件魔法是0xFEFF),我可以按照自己的意愿打开文件:

 f = open(file, 'rb')

但是当我做的时候

print f.read(40)

它打印文件的实际unicode字符串,我想访问十六进制数据并逐字节读取。这可能是一个愚蠢的问题,但我无法找到如何做到这一点。

另外,作为后续问题。一旦我得到这个工作,我想解析文件寻找一组特定的字节,在这种情况下:

0x00 00 00 43 00 00 00

找到该模式后,开始解析一个条目。实现这一目标的最佳方法是什么?我正在考虑使用生成器遍历每个字节,一旦这个模式出现,产生字节直到该模式的下一个实例?有没有更有效的方法来做到这一点?

编辑:我使用的是Python 2.7

2 个答案:

答案 0 :(得分:1)

你不应该只能做到这一点

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

答案 1 :(得分:1)

如果你想要一个十六进制的字符串,你可以通过binascii.hexlify()传递它:

with open(filename, 'rb') as f:
    raw = f.read(40)
    hexadecimal = binascii.hexlify(raw)
    print(hexadecimal)

(这在Python 3上无需修改即可使用)

如果你需要每个字节的数值,你可以在每个元素上调用ord(),或者相当于map()字符串上的函数:

with open(filename, 'rb') as f:
    raw = f.read(40)
    byte_list = map(ord, raw)
    print byte_list

(这不适用于Python 3,但在3.x上,您可以直接迭代raw