2015-11-07 90 views
0

我有寫cyryllic到csv的問題。我用unicodecsv和下一片段:Python unicode csv cyryllic,不轉換

import unicodecsv 

ff = open('test.csv', 'wb+') 
writer = unicodecsv.writer(ff, encoding='utf-8', delimiter=',', quotechar='"') 
writer.writerows([[u'тест', 'aaa', 'nnn']]) 
ff.close() 

CSV產生很好,但不是U在Microsoft Excel 2011中打開它,我看到: enter image description here

嘗試在自由報辦公室也一樣,同樣的問題... 操作系統:Mac OS約塞米蒂

不使用UTF-8-SIG工作過:

writer = unicodecsv.writer(ff, encoding='utf-8-sig', delimiter=',', quotechar='"') 
+0

什麼是'打印(再版(開放( 'test.csv', 'RB') .read()[:11]))'? – jfs

回答

1

的Excel喜歡UTF-8-ENC Oded文件具有BOM(字節順序標記)簽名。相反,使用utf-8-sig作爲編碼,否則它認爲該文件是ANSI編碼的。 「ANSI」是由語言環境決定的,在美國的Windows上是Windows-1252。保存UTF-8編碼

測試源文件:

#coding:utf8 
import unicodecsv 

with open('test.csv', 'wb+') as ff: 
    writer = unicodecsv.writer(ff, encoding='utf-8-sig', delimiter=',', quotechar='"') 
    writer.writerows([[u'тест', 'aaa', 'nnn']]) 

輸出:

enter image description here

+0

'writer = unicodecsv.writer(ff,encoding ='utf-8-sig',delimiter =',',quotechar ='''')'同樣的問題 –

+1

@OlegBeat,我剛剛安裝了'unicodecsv'並進行了測試。在Windows上正確打開我的文件,文件的十六進制編輯顯示BOM是正確寫入的,'utf-8'的原始編碼沒有BOM,也沒有工作。你的源文件,並實際上保存在該編碼源? –