使用Python读取文件时不知道编码方式。

5
我想从文件夹中读取所有文件(使用os.walk),并将它们转换为一个编码(UTF-8)。问题是这些文件的编码不同。它们可能是UTF-8,带BOM的UTF-8,UTF-16。
有没有办法在不知道它们的编码的情况下读取这些文件?

1
从最普遍的意义上来说,不行。但是你可以使用各种启发式方法来尝试解决它,这非常取决于你特定的数据集。 - Tom Dalton
2个回答

6
你可以以二进制模式读取这些文件。此外,chardet库可以帮助你检测字符编码。使用chardet,你可以检测文件的编码并解码获取到的数据。不过,这个模块有一些限制。
举个例子:
from chardet import detect

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

谢谢 Andrey。这确实有帮助。 - Sam Black

0
如果确实总是这三个中的一个,那就很容易。如果您可以使用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%可靠的方法来确定编码。但是你可以猜测——例如,参见是否有Python库函数尝试猜测某些字节的字符编码?

@ClaytonWahlstrom 是的,这也是链接问题所说的。但对于这个简单的情况,这并不是必要的。 - roeland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接