所以我试图用一个包含unicode字符的csv表创建一个表:
with open('test1.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
[writer.writerow(r) for r in table]
每次尝试运行程序时都会出现此错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 8-10: ordinal not in range(128)
我该如何解决这个问题?
答案 0 :(得分:2)
首先,您不需要使用列表推导来编写csv文件,其次如果您使用python 2.X
,则可以使用codecs
模块以正确的编码打开文件,如果您使用的是python 3.X,则可以在open
函数中使用encoding
参数。
另请注意,由于write
方法使用了您的默认编码,如果您仍然遇到unicode错误,则可以在str.encode()
方法中使用write
方法。
Python 2.X:
import codecs
with codecs.open(filename, 'w', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
for r in table:
writer.writerow(r.encode('utf-8'))
Python 3.X:
with open(filename, 'wb', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
for r in table:
writer.writerow(r.encode('utf-8'))
答案 1 :(得分:1)
假设你正在使用Python2:
with open('test1.csv', 'wb') as csvfile:
writer = csv.writer(csvfile)
for r in table:
writer.writerow([x.encode('utf-8') for x in r])
当然,当您打开csv文件时,您还需要使用相同的编码对其进行解码:
with open('test1.csv') as csvfile:
reader = csv.reader(csvfile.decode('utf-8'))
(注意:如果您使用的是Python3,那么这一切都不是必需的 - 您的原始示例可以正常工作)。