【发布时间】:2015-05-28 00:34:55
【问题描述】:
当我用 Python 打开一个文件时会感到困惑。顺便说一句,我使用的是 python3.4。
首先它是一个日志文件(一个随时追加的巨大文件),所以iconv 是不可能的。
Info1 file 是 ASCII 文本。
demo git:master ❯ file 1.log
1.log: ASCII text, with very long lines
Info2 ipython 使用默认编码“UTF-8”打开它:
In [1]: f = open('1.log')
In [2]: f.encoding
Out[2]: 'UTF-8'
那么
第一次当我open('1.log', encoding='utf-8', mode='r')
错误:'utf-8' 编解码器无法解码位置 6435 中的字节 0xb1:无效起始字节
第二次当我open('1.log', encoding='ascii', mode='r')
错误:'ascii' 编解码器无法解码位置 6633 中的字节 0xe9:序数 不在范围内(128)
如何在读取每一行时优雅地处理此文件?
这是我在 github 上的演示 demo
【问题讨论】:
-
您知道文件的实际编码吗?考虑到它包含 0xE9 字节,它绝对是 not ASCII 文件。
-
您可以使用file magic for Python 来获取有关您正在使用的文件及其编码的更多信息。
-
@dlask 这是 F5 博客,我真的不知道是哪种编码。
file命令是否只检测文件的开头?