2016-08-08 89 views
0

我想读与CP1252编码这样的csv文件:编码错误

import io 
import csv 

csvr = csv.reader(io.open('data.csv', encoding='cp1252')) 

for row in csvr: 
    print row 

“data.csv”的相关内容是

Curva IV 
Fecha: 27-Jul-2016 16:22:40 
Muestra: 1 
Tensión  Corriente  Ig 
0.000000e+000 1.154330e-004 -2.984730e-004 
... 

,我得到下面的输出

['Curva IV'] 
['Fecha: 27-Jul-2016 16:22:40'] 
['Muestra: 1'] 
Traceback (most recent call last): 
    File "D:/sandbox/bla.py", line 347, in <module> 
    mist() 
    File "D:/sandbox/bla.py", line 343, in mist 
    for row in csvr: 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 5: ordinal not in range(128) 

我不明白的。显然,关键点在于'o'的口音。看起来像csv.reader返回的对象的迭代器试图进行转换。在打印语句之前引发异常,所以它不是我的终端编码问题。有什么想法发生在这里?

回答

0

从文档:

这csv模块的版本不支持Unicode输入。此外, 目前有一些关于ASCII NUL字符的问题。 因此,所有的输入应该是UTF-8或可打印的ASCII以保证安全; 请参阅示例部分中的示例。

在将输入传递给csv.reader之前,输入必须转换为UTF-8。