Ich habe eine .csv-Datei in UTF-8 codiert, die sowohl lateinische und kyrillische Symbole enthält.UTF-8-Datei mit Codecs in IronPython lesen
;F1;F2;abcdefg3;F200
;ABSOLUTE;NOMINAL;NOMINAL;NOMINAL
o1;1;USA;Новосибирск;1223
Ich versuche folgende Skript in Ironpython 2.7.1 auszuführen:
import codecs
f = codecs.open(r"file.csv", "rb", "utf-8")
f.next()
Während der Ausführung f.next() eine Ausnahme auftritt:
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, '')
Bei der Zur gleichen Zeit in CPython 2.7 funktioniert das Skript korrekt. Auch in der IronPython 2.7.1 funktioniert folgendes Skript:
Wer weiß, was so seltsames Verhalten verursachen kann?
Ich habe versucht, "b" zu entfernen. Ausnahme verschwand, aber kyrillische Symbole wurden falsch dekodiert. Gemäß der Dokumentation nimmt StreamReader außerdem einen Stream, der ein dateiähnliches Objekt sein muss, das zum Lesen von (binären) Daten geöffnet ist. – usahara