gpt4 book ai didi

python - Django创建包含Unicode的CSV文件,可以直接用Excel打开

转载 作者:太空狗 更新时间:2023-10-29 22:13:54 24 4
gpt4 key购买 nike

我想通过 Django 创建一个包含 unicode 数据(希腊字符)的 CSV 文件,我希望它可以直接从 MS Excel 打开。我在其他地方读到了 unicodecsv 库,我决定使用它。所以,这是我的观点;

def get_csv(request, id):    response = HttpResponse(mimetype='text/csv')    response['Content-Disposition'] = 'attachment; filename=csv.csv'    writer = unicodecsv.writer(response, encoding='utf-16"')    writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "ελληνικά"])    return response

现在,除了utf-16,我真的尝试了编写器编码参数中的一切,包括utf-8、utf-8-sig、utf-8-le、utf-16 -le 和其他人。每次我用 excel 打开文件时,我总是在应该是希腊字符的地方看到垃圾。

Notepad++ 能够毫无问题地打开文件。我做错了什么?

更新:这是我在 jd 的回答后尝试的:

import csvresponse = HttpResponse(mimetype='text/csv')response['Content-Disposition'] = 'attachment; filename=test.csv'response.write(u'\ufeff'.encode('utf8'))writer = csv.writer(response, delimiter=';' , dialect='excel')writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "ελληνικά"])return response

仍然不走运 - 现在我也可以在 Excel 中看到 BOM(作为抓取) - 我也尝试使用 unicodecsv 和其他一些选项,但再次没有任何效果:(

更新 2:我在 dda 的建议下尝试了这个:

writer = unicodecsv.writer(response, delimiter=';' , dialect='excel')writer.writerow(codecs.BOM_UTF16_LE)writer.writerow([ (u'ελληνικά').decode('utf8').encode('utf_16_le')])

仍然没有运气 :( 这是我得到的错误:

UnicodeEncodeError at /csv/559'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

更新 3:我快疯了。为什么这么难???这是另一个尝试:

response.write(codecs.BOM_UTF16_LE)writer = unicodecsv.writer(response, delimiter=';' ,  lineterminator='\n', dialect='excel',  )writer.writerow('ελληνικ')writer.writerow([ ('ελληνικά').decode('utf8').encode('utf_16_le')]) #Awriter.writerow([ ('ελληνικά2').decode('utf8').encode('utf_16_le'),  ('ελληνικά2').decode('utf8').encode('utf_16_le') ]) #B

这是 Excel 的内容:

㯎㮵㯎㮻㯎㮻㯎㮷㯎㮽㯎㮹㯎઺ελληνικά딊묃묃뜃봃뤃먃갃㈃딻묃묃뜃봃뤃먃갃㈃

所以我得到了一些带有#A 行的希腊字符。但是完全相同的 B 行没有产生希腊字符 $^#$#^$#$#^ @@%$#^#^$#$ 请帮忙!

最佳答案

使用 Python 的 csv 模块,您可以编写一个 UTF-8 文件,如果您将 BOM 放在文件的开头,Excel 将正确读取该文件。

with open('myfile.csv', 'wb') as f:
f.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(f, delimiter=';', lineterminator='\n', quoting=csv.QUOTE_ALL, dialect='excel')
...

同样适用于 unicodecsv。我想您可以将 BOM 直接写入 HttpResponse 对象,如果不能,您可以使用 StringIO 首先写入您的文件。

编辑:

下面是一些示例代码,用于编写包含非 ASCII 字符的 UTF-8 CSV 文件。为简单起见,我将 Django 排除在外。我可以在 Excel 中读取该文件。

# -*- coding: utf-8 -*-
import csv
import os
response = open(os.path.expanduser('~/utf8_test.csv'), 'wb')
response.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(response, delimiter=';' , dialect='excel')
writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', u"ελληνικά".encode('utf8')])
response.close()

关于python - Django创建包含Unicode的CSV文件,可以直接用Excel打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com