我有一个用ANSI或UTF-16LE编码的文件集合。我想让python使用正确的编码打开文件。问题是,使用UTF-16le编码时,ANSI文件不会引发任何类型的异常,反之亦然。
有没有一种简单的方法可以使用正确的文件编码打开文件?
发布于 2009-05-04 09:26:14
使用chardet库检测编码。
发布于 2009-05-04 09:27:06
您可以检查文件开头的BOM,以检查它是否为UTF。
然后进行相应的unicode.decode (使用其中一个standard encodings)。
编辑或者,也许,尝试s.decode('ascii')你的字符串(给定的s是变量名)。如果抛出UnicodeDecodeError,则将其解码为“utf_16_le”。
发布于 2009-05-05 12:09:01
文件里有什么?如果它是拉丁字母表中的纯文本,那么UTF-16LE文件几乎每隔一个字节就为零。另一方面,在windows-1252文件中,我不希望看到任何零。例如,下面是windows-1252中的“Hello”:
93 48 65 6C 6C 6F 94UTF-16LE中的...and:
1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20除了花括号之外,每个字符都映射到相同的值,并添加了一个尾随的零字节。事实上,对于ISO-8859-1字符集中的每个字符都是如此(windows-1252扩展了ISO-8859-1,为几个打印字符添加了映射,如花括号,以替换范围0x80..0x9F中的控制字符)。
如果你知道所有的文件都是windows-1252或UTF-16LE,那么你只需要快速扫描一下0就可以知道哪个是哪个了。chardet如此缓慢和复杂有一个很好的原因,但在这种情况下,我认为你可以逃脱快速和肮脏。
https://stackoverflow.com/questions/819396
复制相似问题