由于某种原因,我无法寻找我的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).否则,我看到两个可能的解决方案:
在您寻找之前,请先读取文件的前两个字节以获取BOM.你似乎说这不起作用,表明它可能在搜索之后期待一个新的UTF-16流,所以:
打开文件时,使用utf-16-le或utf-16-be作为编码显式指定字节顺序.
| 归档时间: |
|
| 查看次数: |
12738 次 |
| 最近记录: |