我已經通過django創建了csv文件。我已將編碼的數據寫入該數據。但是當我在Excel表格中打開此文件時,unicode字符無法正確顯示。使用django創建csv文件並直接打開到Excel
我也提到了這個問題 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文件正確。 但是它給字符串中的'æ'和''等字符提供了錯誤。
錯誤:拉丁-1'編解碼器無法編碼的字符U「\ u2013」在266位置:順序不在範圍內(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'))
W雖然這不是一個真正的答案,你應該嘗試tablib,它允許導出xls。 – bmihelac