自动以适当的编码打开文件

时间:2010-02-26 14:34:27

标签: python

我正在处理一些关于编码的文件中的一些问题。我们从其他公司接收文件并且必须阅读它们(文件是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中这样做的方法吗?

PD:我希望这将在Python 3中解决,因为所有字符串都是Unicode ...

4 个答案:

答案 0 :(得分:9)

chardet可以帮到你。

  

字符编码自动检测   Python 2和3.像你的一样聪明   浏览器。开源。

答案 1 :(得分:5)

它不会在python 3中“修复”,因为它不是一个可修复的问题。许多文档在几种编码中都有效,因此确定正确编码的唯一方法是了解文档。幸运的是,在大多数情况下,我们对文档有所了解,例如,大多数字符将聚集到不同的unicode块中。英文文档主要包含前128个代码点中的字符。俄语文档将主要包含西里尔字母代码点。大多数文档将包含空格和换行符。这些线索可用于帮助您对使用的编码进行有根据的猜测。更好的是,使用已经完成工作的人编写的库。 (与chardet一样,在Desintegr的另一个答案中提及。

答案 2 :(得分:0)

csv.reader无法处理2.x中的Unicode字符串。请参阅csv documentationthis question的底部,了解处理它的方法。

答案 3 :(得分:-3)

如果它将在Python 3中修复,它也应该通过使用

来修复
from __future__ import unicode_literals