在python中搜索utf-16文件。怎么样?

时间:2011-07-21 16:17:33

标签: python utf-16

出于某种原因,我无法找到我的utf16文件。它产生' UnicodeException:UTF-16流不以BOM'开头。我的代码:

f = codecs.open(ai_file, 'r', 'utf-16')
seek = self.ai_map[self._cbClass.Text]  #seek is valid int
f.seek(seek)
while True:
    ln = f.readline().strip()

我尝试过随机的东西,比如先从流中读取一些东西,但没有帮助。我检查了寻求使用十六进制编辑器的偏移量 - 字符串从字符开始,而不是空字节(我猜它的好兆头,对吗?) 那么如何在python中寻找utf-16?

1 个答案:

答案 0 :(得分:26)

好吧,错误消息告诉你原因:它没有读取字节顺序标记。字节顺序标记位于文件的开头。在没有读取字节顺序标记的情况下,UTF-16解码器无法知道字节的顺序。显然它是在第一次读取时懒惰,而不是在打开文件时 - 或者它假设seek()正在启动新的UTF-16流。

如果您的文件没有BOM,那肯定是问题,您应该在打开文件时指定字节顺序(参见下面的#2)。否则,我看到两个可能的解决方案:

  1. 在您寻找之前,请先阅读文件的前两个字节以获取BOM。你似乎说这不起作用,表明也许它在寻求之后期待一条新的UTF-16流,所以:

  2. 打开文件时,使用utf-16-leutf-16-be作为编码,明确指定字节顺序。