2016-08-08 31 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。