【问题标题】:Encoding error using csv.reader on io file object with non-ascii encoding使用 csv.reader 对具有非 ascii 编码的 io 文件对象进行编码错误
【发布时间】:2016-08-08 21:35:16
【问题描述】:

我正在尝试读取带有 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 语句之前引发了异常,因此这不是我的终端编码的问题。有什么想法吗?

【问题讨论】:

    标签: python python-2.7 csv encoding


    【解决方案1】:

    来自文档:

    注意

    此版本的 csv 模块不支持 Unicode 输入。还, 目前存在一些关于 ASCII NUL 字符的问题。 因此,为了安全起见,所有输入都应该是 UTF-8 或可打印的 ASCII; 请参阅示例部分中的示例。

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

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多