2011-11-13 71 views
2

我一直在使用PHP一段時間,我在Python中編碼有問題

但現在我正在嘗試學習Python。 我從來沒有真正有過使用PHP進行編碼的嚴重問題。至少我可以在幾分鐘內解決。但我花了幾個小時來解決python中的編碼問題,但我仍然無法解決它。

所以我的問題是,我想用外殼重定向使用此命令

python make_csv.py > csvfile.csv 

但是,這是印在CSV文件中的文本日本人都搞砸打印字符串日本人到一個文件。

我已經嘗試了幾種解決方案,如使用.encode(「UTF-8」)等,但仍沒有運氣 ,我也遇到這樣的錯誤:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 5: ordinal not in range(128) 

我怎麼能解決這個問題? 請幫忙。

+8

顯示您的代碼。只是錯誤信息不會告訴我們你的錯誤是什麼(儘管我的猜測是你以文本模式而不是二進制模式打開文件)。 –

+0

最常見的問題是.encode('utf8')方法在'unicode'類型不是'str'上有用。首先使用.decode(<文件中的解碼類型>),然後使用.encode('utf8')或簡單地使用unicode字符串'u'ニコード''。 – Arpegius

+0

如何以二進制模式打開gz文件? – bbnn

回答

2

嘗試將環境變量PYTHONIOENCODING設置爲utf8。這將使Python在默認情況下使用該編碼而不是默認編碼。

0

更新:我刪除了我的意見,因爲它不是爲真正的問題有幫助,因爲我看錯了......

現在,這裏我要分錢,可以或許有所幫助:您打印日語文本爲標準輸出(sys.stdout)。注意,在Windows中,sys.stdout的默認編碼是CP850,而不是UTF-8 ...

(要更改Python的默認io編碼,請查看tchrist指出的解決方案:set PYTHONIOENCODING to UTF-8 )

+0

我剛剛檢查過我的代碼是file = gzip.open(infile,'rb') – bbnn

+2

不,你不想在二進制模式下打開它,你想在打開時指定encoding = utf8' – tchrist

+0

我同意了,我誤讀了帖子,並改變了我的帖子 – gecco