通字符导致python停止读取文件

时间:2014-03-17 11:42:03

标签: python python-2.7

我正在使用

在python 2.7中读取字幕文件(在UCS-2中编码)
f = 'filename.ssa'
with open(f, "r") as fl:
    allLines = fl.readlines()

当它到达这一行时

  

对话:0,0:02:25.54,0:02:28.40,默认,, 0000,0000,0000 ,,模木さん,手筈通り,火口にレシーバーを

它实际上只读取此内容,然后停止。

  

对话:0,0:02:25.54,0:02:28.40,默认,0000,0000,0000 ,,模木さん,手筈

如果我删除了通字符,它会继续并到达

  

对话:0,0:05:41.28,0:05:42.77,默认,0000,0000,0000 ,, {\ fs30}计画通り...

但同样,它只读取并停止:

  

Dialogue:0,0:05:41.28,0:05:42.77,Default ,, 0000,0000,0000 ,, {\ fs30}计画

同样,通字符会将读取停止,就好像它是文件的结尾一样。没有错误被抛出

如果我首先将文件编码为UTF-8,它可以工作,但我不想这样做。任何人都可以解释为什么在UCS-2中这个通字符会停止阅读吗?如果我将python编译为带有py2exe的exe,它似乎也有效。我正在日蚀中发展。这毫无意义。

1 个答案:

答案 0 :(得分:3)

"通"在UCS-2中编码的是0x1a 0x90。在DOS文件中,0x1a也被认为是EOF字符(" ^ Z")。考虑通过codecs.open()以二进制模式打开文件。