2015-11-07 91 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,也没有工作。你的源文件,并实际上保存在该编码源? –