我正在处理一些关于编码的文件中的一些问题。我们从其他公司接收文件并且必须阅读它们(文件是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 ...答案 0 :(得分:9)
chardet可以帮到你。
字符编码自动检测 Python 2和3.像你的一样聪明 浏览器。开源。
答案 1 :(得分:5)
它不会在python 3中“修复”,因为它不是一个可修复的问题。许多文档在几种编码中都有效,因此确定正确编码的唯一方法是了解文档。幸运的是,在大多数情况下,我们对文档有所了解,例如,大多数字符将聚集到不同的unicode块中。英文文档主要包含前128个代码点中的字符。俄语文档将主要包含西里尔字母代码点。大多数文档将包含空格和换行符。这些线索可用于帮助您对使用的编码进行有根据的猜测。更好的是,使用已经完成工作的人编写的库。 (与chardet
一样,在Desintegr的另一个答案中提及。
答案 2 :(得分:0)
csv.reader无法处理2.x中的Unicode字符串。请参阅csv documentation和this question的底部,了解处理它的方法。
答案 3 :(得分:-3)
如果它将在Python 3中修复,它也应该通过使用
来修复from __future__ import unicode_literals