使用Python读取文件而不知道编码

时间:2015-12-23 03:07:38

标签: python python-3.x encoding readfile

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

有没有办法在不知道编码的情况下读取这些文件?

2 个答案:

答案 0 :(得分:2)

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

举个例子:

vnoremap a' i'loho

答案 1 :(得分:0)

如果确实总是这3个中的一个,那么很容易。如果你可以使用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?