自动以正确编码打开文件
我在处理一些文件时遇到了一些编码问题。我们从其他公司收到文件,需要读取这些文件(这些文件是csv格式的)。
奇怪的是,这些文件似乎是用UTF-16编码的。我能够做到这一点,但我必须使用codecs
模块,并指定编码,像这样。
ENCODING = 'utf-16'
with codecs.open(test_file, encoding=ENCODING) as csv_file:
# Autodetect dialect
dialect = csv.Sniffer().sniff(descriptor.read(1024))
descriptor.seek(0)
input_file = csv.reader(descriptor, dialect=dialect)
for line in input_file:
do_funny_things()
不过,就像我可以以更通用的方式获取方言一样,我在想,如果能有一种方法自动用正确的编码打开文件,那就太好了,至少对于所有文本文件来说是这样。有其他程序,比如vim,可以做到这一点。
有没有人知道在python 2.6中怎么做?
附注:我希望在Python 3中能解决这个问题,因为所有字符串都是Unicode格式的……
4 个回答
6
在Python 3中,这个问题不会被“修复”,因为它根本不是一个可以修复的问题。很多文档在不同的编码下都是有效的,所以要确定正确的编码,必须对文档有一些了解。幸运的是,在大多数情况下,我们确实对文档有一些信息,比如大部分字符会聚集在不同的unicode块中。比如,英文文档大多只会包含前128个字符的编码,而俄文文档则主要包含西里尔字母的编码。大多数文档还会包含空格和换行符。这些线索可以帮助你对使用的编码做出合理的猜测。更好的办法是使用一个已经有人写好的库,这样你就不用自己费劲去做了。(比如chardet
,在另一个回答中提到过的,作者是Desintegr。)
13
chardet 可以帮助你。
这是一个可以自动检测字符编码的工具,适用于Python 2和3。它的智能程度和你的浏览器差不多。并且它是开源的。