【问题标题】:Read file with Python without knowing encoding在不知道编码的情况下使用 Python 读取文件
【发布时间】:2015-12-23 03:07:38
【问题描述】:

我想从一个文件夹中读取所有文件(使用os.walk)并将它们转换为一种编码(UTF-8)。问题是这些文件没有相同的编码。它们可以是 UTF-8、带有 BOM 的 UTF-8、UTF-16。

有没有什么方法可以在不知道编码的情况下读取这些文件?

【问题讨论】:

  • 在最一般的意义上,没有。但是您可以使用各种启发式方法来尝试一下,这非常依赖于您的特定数据集。

标签: python python-3.x encoding readfile


【解决方案1】:

您可以以二进制模式读取这些文件。还有 chardet 模块。有了它,您可以检测文件的编码并解码您获得的数据。虽然这个模块有局限性。

举个例子:

from chardet import detect

with open('your_file.txt', 'rb') as ef:
    detect(ef.read())

【讨论】:

  • 谢谢安德烈。这确实有帮助。
【解决方案2】:

如果确实总是这三个之一,那么这很容易。如果您可以使用 UTF-8 读取文件,那么它可能是 UTF-8。否则它将是 UTF-16。 Python 还可以自动丢弃 BOM(如果存在)。

您可以使用 try ... except 块来尝试两者:

try:
    tryToConvertMyFile(from, to, 'utf-8-sig')
except UnicodeDecodeError:
    tryToConvertMyFile(from, to, 'utf-16')

如果还存在其他编码(如 ISO-8859-1),那就忘记它,没有 100% 可靠的方法来确定编码。但你可以猜到——例如见Is there a Python library function which attempts to guess the character-encoding of some bytes?

【讨论】:

  • @ClaytonWahlstrom 是的,这也是链接问题所说的。但对于这种简单的情况,没有必要。
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多