我已经通过django创建了csv文件。我已将编码数据写入其中。但是当我在Excel工作表中打开此文件时,unicode字符无法正常显示。
我也提到了这个问题 Django create CSV file that contains Unicode and can be opened 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文件,但其中的字符编码不正确。 该角色将显示为“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文件。 但它会给某些字符带来错误,例如'æ'和'在字符串中。
错误:'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'))
答案 0 :(得分:0)
你应该看看unicodecsv。它为我解决了类似的麻烦。
答案 1 :(得分:0)
我已经解决了上述问题。我编写如下代码。
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)
但是这个错误是因为空字符串和我传递给编码时的' - '字符。当我在将字符串传递给编码之前设置条件并将' - '字符替换为'_'时,可以解决这个问题。