2012-02-29 71 views
8

我一直在使用python 2.6。當我正在編寫一個python程序來處理來自sql server的查詢結果(以csv格式)時。我發現它不支持unicode。python 3.1.3是否支持csv模塊中的unicode?

當我運行csv文件的程序,錯誤POP操作起來說:

for row in csvReader: 
Error: line contains NULL byte 

後,我保存CSV文件用UltraEdit ANSI/ASCII格式,程序運行正常。

我想包括編碼選項,但它失敗:

csvReader = csv.reader(open(fname, mode='rb', encoding='unicode'), delimiter=',') 
TypeError: 'encoding' is an invalid keyword argument for this function 

csvReader = csv.reader(open(fname, mode='rb', encoding='utf-8'), delimiter=',') 
TypeError: 'encoding' is an invalid keyword argument for this function 

不知巨蟒-3支持這個unicode閱讀。它可以爲我節省很多工作。

+0

你爲什麼不直接從蟒蛇訪問SQL? – Kimvais 2012-02-29 06:53:44

+0

Python 3.1.3的'open' *絕對*支持和'encoding ='參數,所以要麼使用不同版本的Python,要麼意外地覆蓋了'open'函數。 – 2012-02-29 07:02:38

+0

我說我正在使用python 2.6。那麼Python 3.1.3不會有這個問題? – lamwaiman1988 2012-02-29 07:05:45

回答

6

Python 3絕對支持unicode。我的猜測是,當您打開CSV文件進行閱讀時,您指定了錯誤的(或無?)編碼。請參閱:http://docs.python.org/release/3.1.3/library/functions.html#open

並嘗試類似:

reader = csv.reader(open("foo.csv", encoding="utf-8")) 

編輯:如果您在使用Python 2.6,可以實現同樣的結果:

import codecs 
reader = csv.reader(codecs.open("foo.csv", encoding="utf-8")) 

無論其如果您'獲得空字節,您的文件可能使用"utf-16"進行編碼,因此請嘗試使用utf-8解碼文件。

+0

我試圖指定編碼,但它返回一個錯誤。請檢查我的編輯。 – lamwaiman1988 2012-02-29 06:58:56