我已经通过 django 创建了 csv 文件。我已将编码数据写入其中。但是当我在 excel 表中打开这个文件时,unicode 字符无法正确显示。
我也参考了这个问题 Django create CSV file that contains Unicode and can be open directly with 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 文件,但其中的字符编码不正确。字符将显示为“Tokaj Hé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文件。但它会为字符串中的某些字符(如 'æ' 和 ' )提供错误。
错误:“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'))