【问题标题】:Unicode Error on PythonPython上的Unicode错误
【发布时间】:2015-09-30 15:27:56
【问题描述】:

所以我正在尝试使用包含 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)

我该如何解决这个问题?

【问题讨论】:

标签: python csv unicode


【解决方案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,则这些都不是必需的 - 您的原始示例可以正常工作)。

【讨论】:

    【解决方案2】:

    首先,您不需要使用列表推导来写入 csv 文件,其次,如果您使用 python 2.X,您可以使用 codecs 模块以正确的编码打开文件,如果您正在使用python 3.X 你可以在open函数中使用encoding参数。

    还请注意,由于 write 方法使用了您的默认编码,如果仍然出现 unicode 错误,您可以在 write 方法中使用 str.encode() 方法。

    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'))
    

    【讨论】:

    • 使用您的代码时出现此错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 8-10: ordinal not in range(128)
    • 我现在收到此错误:AttributeError: 'list' object has no attribute 'encode'
    • @K.B 您的表格是否包含列表?
    • 是的,元素表中全是列表
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2011-08-05
    • 1970-01-01
    • 2021-09-01
    • 2011-03-14
    相关资源
    最近更新 更多