我想要读取文件夹中的所有文件(使用os.walk
)并将它们转换为一种编码(UTF-8)。问题是那些文件没有相同的编码。它们可以是UTF-8,UTF-8,BOM,UTF-16。
有没有办法在不知道编码的情况下读取这些文件?
答案 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?