使用带有非ascii编码的io文件对象上的csv.reader编码错误

时间:2016-08-08 21:35:16

标签: python python-2.7 csv encoding

我正在尝试使用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语句之前引发异常,因此我的终端编码不会出现问题。任何想法在这里发生了什么?

1 个答案:

答案 0 :(得分:0)

来自文档:

  

请注意

     

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

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