2012-04-12 4 views
10

Ho un file .csv codificato in UTF-8, che contiene sia i simboli latini che quelli cirillici.Lettura di file UTF-8 con codec in IronPython

;F1;F2;abcdefg3;F200 
;ABSOLUTE;NOMINAL;NOMINAL;NOMINAL 
o1;1;USA;Новосибирск;1223 

sto cercando di eseguire script seguente in IronPython 2.7.1:

import codecs 

f = codecs.open(r"file.csv", "rb", "utf-8") 
f.next() 

Durante l'esecuzione di f.next() si verifica un'eccezione:

Traceback (most recent call last): 
    File "c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\1.1\visualstudio_py_repl.py", line 492, in run_file_as_main 
    code.Execute(self.exec_mod) 
    File "<string>", line 4, in <module> 
    File "C:\Program Files\IronPython 2.7.1\Lib\codecs.py", line 684, in next 
    return self.reader.next() 
    File "C:\Program Files\IronPython 2.7.1\Lib\codecs.py", line 615, in next 
    line = self.readline() 
    File "C:\Program Files\IronPython 2.7.1\Lib\codecs.py", line 530, in readline 
    data = self.read(readsize, firstline=True) 
    File "C:\Program Files\IronPython 2.7.1\Lib\codecs.py", line 477, in read 
    newchars, decodedbytes = self.decode(data, self.errors) 
UnicodeEncodeError: ('unknown', '\x00', 0, 1, '') 

Al nello stesso tempo in CPython 2.7 lo script funziona correttamente. Anche nel seguente script IronPython 2.7.1 funziona bene:

import codecs 

f = codecs.open(r"file.csv", "rb", "utf-8") 
f.readlines() 

Qualcuno sa cosa può causare un comportamento così strano?

risposta

2

sembra che potrebbe essere un bug nel modo in cui gestisce i codec next(). Potete per favore open an issue con i file da riprodurre allegati?

0

Può essere problemi con il parametro "rb", tenta di utilizzare 'r'

f = codecs.open(r"file.csv", "r", "utf-8") 
+0

Ho provato a rimuovere "b". L'eccezione è scomparsa, ma i simboli cirillici sono stati decodificati in modo errato. Inoltre, secondo la documentazione, StreamReader prende il flusso che deve essere un oggetto simile a un file aperto per la lettura dei dati (binari). – usahara