如何在python生成的CSV文件中添加编码

时间:2013-06-26 04:06:06

标签: python csv utf-8

我正在关注这篇文章

https://stackoverflow.com/a/9016545

我想知道我怎么能用Python做到这一点。我不知道如何在那里插入BOM数据

这是我目前的代码

    response = HttpResponse(content_type='text/csv')
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = 'attachment; filename="results.csv"'
    writer = UnicodeWriter(response, quoting=csv.QUOTE_ALL, encoding="utf-8")

我想转换为utf -16。 BOm数据是这样但不知道如何插入它 从这里https://stackoverflow.com/a/4440143

echo "\xEF\xBB\xBF"; // UTF-8 BOM

但是我想要它用于python和utf-16

我尝试在记事本中打开csv并在开头插入\xef\xbb\xb并正确显示excel。但在第一栏之前也可见。

我如何隐藏,因为用户不喜欢

2 个答案:

答案 0 :(得分:2)

这些行中的任何一行都为编码写入了正确的BOM。如果BOM正确,则Excel不应显示它。

writer = UnicodeWriter(response, quoting=csv.QUOTE_ALL, encoding="utf-8-sig")

或:

writer = UnicodeWriter(response, quoting=csv.QUOTE_ALL, encoding="utf16")

utf8utf-16leutf-16be 撰写BOM。

答案 1 :(得分:0)

我认为您插入了错误的BOM。从https://en.wikipedia.org/wiki/Byte_order_mark#UTF-16开始,它建议您使用FF FE或FE FF(取决于大端或小端)

python docs(http://docs.python.org/2/howto/unicode.html)表明utf-16有一个编码设置。此外还有这些编码的变体,例如'utf-16-le'和'utf-16-be'用于小端和大端编码'。也许这些将允许在写作期间自动插入BOM。