一、前言
一般來說,為了方便,使用python的時候都會使用csv模塊去寫數據到csv文件,但是寫入中文的時候,經常會報錯:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
我試過直接用utf8編碼打開文件,然后直接將要寫入的字段拼接為逗號分隔的字符串,雖然能解決中文寫入的問題,但是操作很麻煩。而且直接使用excel打開的時候,還是會顯示亂碼。
用excel直接打開編碼utf8編碼的csv文件顯示為亂碼的原因,我推測是excel打開csv文件的時候,會先讀取當前系統的默認編碼作為讀取csv文件的編碼;而因為大家使用的一般都是中文系統,所以excel會使用gbk編碼去讀取文件,導致直接顯示為亂碼。
因此解決的點歸結為一句話:
如何使用csv庫,將中文寫入gbk編碼的csv文件。
二、解決
之前用過csv是沒法成功的,后面才查到需要用unicodecsv才行。
直接上例子:
import unicodecsv as ucsv data = [[u"列1", u"列2"], [u"內容1", u"內容2"]] with open('test.csv', 'wb') as f: w = ucsv.writer(f, encoding = 'gbk') w.writerows(data)
直接用文本編輯器打開效果:
用excel直接打開效果:
三、參考
(完)