2012-05-17 38 views
2

可能重复:
Open a file in the proper encoding automaticallyCSV不同编码

我的代码:

import csv 

def handle_uploaded_file(f): 
    dataReader = csv.reader(f, delimiter=';', quotechar='"') 

for row in dataReader: 
    do_sth 

的问题是,它也只能如果CSV是UTF-8编码。我应该更改什么来提供iso-8859-2或windows-1250编码? (最好的解决方案是自动识别编码,但手动转换也是可以的)

+1

http://stackoverflow.com/q/2342284/624829 – Boud

回答

3

现在的解决方案:

def reencode(file): 
    for line in file: 
     yield line.decode('windows-1250').encode('utf-8') 

csv_reader = csv.reader(reencode(open(filepath)), delimiter=";",quotechar='"') 
+1

这不是他crrect回答,CSV文件:由于开放式()用于打开CSV文件对于读取,文件将默认使用系统默认编码解码为unicode(请参阅locale.getpreferredencoding())。要使用不同的编码解码文件,请使用open的编码参数: – Javier

+0

我可以使用'open(filename,'r',encoding ='latin-1')作为f:'打开文件,并且它修复了编码错误,我越来越。一个标准的编码列表可以在这里找到:https://docs.python.org/3/library/codecs.html#standard-encodings –

0

传递一个以codecs.open打开的文件描述符。你不能自动识别编码,或者不是很好。要猜测编码,你可以使用chardet