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

mar*_*rat 17 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()
Run Code Online (Sandbox Code Playgroud)

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

kin*_*all 26

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

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

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

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