Python上的Unicode错误

时间:2015-09-30 15:27:57

标签: python csv unicode

所以我试图用一个包含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)

我该如何解决这个问题?

2 个答案:

答案 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,那么这一切都不是必需的 - 您的原始示例可以正常工作)。