2016-08-08 38 views
0

Ich versuche, eine CSV-Datei mit cp1252 Codierung wie folgt zu lesen:Encoding Fehler auf io Dateiobjekt mit csv.reader mit Nicht-ASCII-Kodierung

import io 
import csv 

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

for row in csvr: 
    print row 

Der relevante Inhalt von ‚data.csv‘ ist

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

und ich bekomme die folgende Ausgabe

['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) 

, die ich überhaupt nicht verstehen. Offensichtlich ist die kritische Linie das mit dem Akzent auf dem 'o'. Es scheint, als ob der Iterator des von csv.reader zurückgegebenen Objekts versucht, eine Konvertierung durchzuführen. Die Ausnahme wird vor der print-Anweisung ausgelöst. Es ist also kein Problem mit meiner Terminalcodierung. Irgendwelche Ideen, was hier vor sich geht?

Antwort

0

Aus der Dokumentation:

Hinweis

Diese Version der CSV-Modul nicht unterstützt Unicode-Eingang. Es gibt derzeit einige Probleme bezüglich ASCII NUL Zeichen. Dementsprechend sollte alle Eingabe UTF-8 oder druckbare ASCII sein, um sicher zu sein; siehe die Beispiele in Abschnitt Beispiele.

Die Eingabe muss in UTF-8 konvertiert werden, bevor sie an csv.reader übergeben wird.