【发布时间】:2016-04-12 19:28:14
【问题描述】:
许多文本编码具有您可以向后遍历编码文本并且仍然能够对其进行解码的属性。 ASCII、UTF-8、UTF-16 和 UTF-32 都具有此属性。这使您可以做一些方便的事情,例如读取文件的最后一行而不读取它之前的所有行,或者从文件中的当前位置向后退几行。
不幸的是,Python 似乎没有提供任何向后解码文件的方法。您不能在编码文件中按字符数量向后read 或seek。 codecs 模块中的解码器支持增量解码向前,但不支持向后解码。似乎没有任何“UTF-8-backwards”编解码器可以以相反的顺序输入 UTF-8 字节。
我可能自己实现与编解码器相关的字符边界同步,向后读取二进制块,并将正确对齐的块从 codecs 模块提供给适当的解码器,但这听起来像是非专家的事情会错过一些细微的细节,而不会注意到输出错误。
是否有任何简单的方法可以使用现有工具在 Python 中向后解码文本?
有些人似乎错过了读取整个文件以达到目的这一点。在我澄清事情的同时,我不妨补充一点,这也需要适用于可变长度编码。 UTF-8 支持是必须的。
【问题讨论】:
-
@gravity:读取整个文件。我特别想不这样做。
-
那里有一个特定的社区 wiki 答案,其中涉及分块阅读。请在此直接链接中查看:stackoverflow.com/questions/260273/…
-
@gravity:这不适用于 Unicode。
-
附言。 UTF-8 边界测试很简单。块的第一个字节不能满足
(x & 0xc0) == 0x80。
标签: python text unicode encoding