使用django创buildCSV文件,并直接打开到Excel

我通过django创build了csv文件。 我已经编码的数据写入。 但是当我在Excel表中打开这个文件,然后unicode字符显示不正确。

我也提到这个问题Django创build包含Unicode的CSV文件,可以直接用Excel打开

但没有得到正确的答案。 我已经尝试了所有的答案,但没有任何工作。

我写的代码如下。

def exportcsv(request): import csv producer_list = Producer.objects.filter() response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename=producer.csv' writer = csv.writer(response, delimiter=",") writer.writerow(codecs.BOM_UTF16_LE) writer.writerow(['Produsenter','Type','Land','Region']) for cdst in producer_list: writer.writerow([cdst.title.encode("UTF-8"), cdst.producer_type.encode("UTF-8"), cdst.country.country.encode("UTF-8"), cdst.region.region.encode("UTF-8")]) return response 

然后csv文件正确创build,但在那个字符不正确编码。 该字符将显示为“TokajHÃtszölö”。

当我尝试

 writer.writerow([cdst.title.encode("iso-8859-1"), cdst.producer_type.encode("iso-8859-1"), cdst.country.country.encode("iso-8859-1"), cdst.region.region.encode("iso-8859-1")]) 

然后我们添加的数据也正确地打开它的Excel文件。 但是它给string中的'æ'和''这样的字符提供了错误。

错误:'latin-1'编解码器无法在位置266对字符u'\ u2013'进行编码:序号不在范围内(256)

我也尝试下面的代码。

 response['Content-Disposition'] = 'attachment; filename=producer.csv' response.write(u'\ufeff'.encode('utf8')) writer = csv.writer(response, delimiter=",") 

也试试

 writer.writerow(codecs.BOM_UTF16_LE) writer.writerow(str.decode('utf8').encode('utf_16_le')) 

你应该看看unicodecsv 。 它为我解决了类似的麻烦。

我已经解决了上述问题。 我写的代码如下。

 writer.writerow([cdst.title.encode("iso-8859-1"), cdst.producer_type.encode("iso-8859-1"), cdst.country.country.encode("iso-8859-1"), cdst.region.region.encode("iso-8859-1")]) 

使用上面的代码我得到了错误

 Error: 'latin-1' codec can't encode character u'\u2013' in position 266: ordinal not in range(256) 

但是这个错误是因为空string和' – '字符,当我传递给编码。 这可以解决,当我设置条件之前传递string进行编码,并用'_'replace' – '字符。