我正在尝试使用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返回的对象的迭代器正在尝试进行转换。在print语句之前引发异常,因此我的终端编码不会出现问题。任何想法在这里发生了什么?
答案 0 :(得分:0)
来自文档:
请注意
此版本的csv模块不支持Unicode输入。也, 目前有一些关于ASCII NUL字符的问题。 因此,所有输入应为UTF-8或可打印的ASCII以确保安全; 请参阅示例部分中的示例。
在将输入传递给csv.reader之前,必须将输入转换为UTF-8。