2012-04-12 112 views
10

我有一個用UTF-8編碼的.csv文件,它包含拉丁文和西里爾文符號。使用IronPython中的編碼解碼器讀取UTF-8文件

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

我想在IronPython的2.7.1執行下面的腳本:

import codecs 

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

f.next的執行過程中()發生異常:

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

在同時在CPython 2.7中該腳本正常工作。另外,在IronPython的2.7.1下面的腳本能正常工作:

import codecs 

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

有誰知道什麼可能造成這種奇怪的行爲?

回答

2

看起來可能是在如何處理next()編解碼器的錯誤。你可以請open an issue與文件重現附件?

0

可能與「RB」參數的麻煩,嘗試用「R」

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

我試圖刪除「b」。異常消失,但西里爾文符號解碼錯誤。此外,根據文檔,StreamReader採用流必須是一個文件類對象打開讀取(二進制)數據。 – usahara 2012-04-12 13:58:22