【发布时间】:2014-02-03 07:01:09
【问题描述】:
如何将 utf-8 字符写入 csv 文件?
我的数据和代码:
# -*- coding: utf-8 -*-
l1 = ["žžž", "ččč"]
l2 = ["žžž", "ččč"]
thelist = [l1, l2]
import csv
import codecs
with codecs.open('test', 'w', "utf-8-sig") as f:
writer = csv.writer(f)
for x in thelist:
print x
for mem in x:
writer.writerow(mem)
错误信息:
Traceback (most recent call last):
File "2010rudeni priimti.py", line 263, in <module>
writer.writerow(mem)
File "C:\Python27\lib\codecs.py", line 691, in write
return self.writer.write(data)
File "C:\Python27\lib\codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
File "C:\Python27\lib\encodings\utf_8_sig.py", line 82, in encode
return encode(input, errors)
File "C:\Python27\lib\encodings\utf_8_sig.py", line 15, in encode
return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 11: ordinal not in range(128)
按任意键继续。 . .
我的错误是什么?
【问题讨论】:
-
附带说明,您没有为源代码指定编码,这意味着 Python 会将其解释为 Latin-1(可能带有警告,但我猜您要么没有看到或忽略它?)...但您显然将其编辑为不同的东西,因为 is 在 Latin-1 中没有
ž字符。因此,即使您解决了当前问题,您也只需将 mojibake 写入文件。例如,如果您使用的是 UTF-8 编辑器,则第一个字符串将以žžž结尾。 -
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')" if [ "$CHARSET" != utf-8 ]; then iconv -f "$CHARSET" -t utf8 "$i" -o outfile fi
标签: python list csv utf-8 export-to-csv