【问题标题】:How to download CSV with unicode characters in Django如何在 Django 中下载带有 unicode 字符的 CSV
【发布时间】:2016-10-13 22:36:32
【问题描述】:

我正在使用 Django 下载并保存 CSV 数据,但当文本不是简单字符串而是 Unicode 时出现问题。

这就是我的工作:

writer = csv.writer(response)
writer.writerow(tuple(corresponding_data[btn]["columns"].split(',')))
for row in rows:
    writer.writerow(row)
return response

我怎样才能包含 unicode 文本?

已编辑

这是我得到的错误:

'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)

如果我试试这个:

writer = csv.writer(response, encoding='utf-8')

我得到一个错误,'encoding' 参数在这个函数中不存在。

【问题讨论】:

  • 在 Python 3 中,使用 open 时使用 encoding 参数,而不是 csv.writer。在 Python 2 中,请参阅this answer 以获取解决方案。

标签: python django csv unicode


【解决方案1】:

经过大量搜索,我设法通过执行以下操作解决了这个问题:

for row in rows:
       field_1 = row[0]
       field_2 = row[1].encode(encoding='UTF-8')
       fields = [field_1, field_2]
       writer.writerows([fields])

说明: CSV 的第一列包含数字。编码功能不适用于数字。这就是为什么我只需要对第二列进行编码。然后我将值传递到一个名为 fields 的新列表中,然后将其写入 CSV。

【讨论】:

    【解决方案2】:

    你需要改变

    writer = csv.writer(response)
    

    到

    writer = csv.writer(response, encoding='utf-8')
    

    【讨论】:

    • 我试过了,但 Django 一直抛出错误:'encoding' is an invalid keyword argument for this function
    • csv.writer 在 Python 2 或 3 中均不采用编码参数。
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2020-01-10
    • 2010-10-28
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多