djangoでcsvファイルを作成しました。そこにエンコードされたデータを書き込みました。しかし、このファイルをExcelシートで開くと、Unicode文字が正しく表示されません。
この質問も参照してください DjangoはUnicodeを含み、Excelで直接開くことができるCSVファイルを作成します
しかし、正しい答えは得られませんでした。私はすべての答えを試しましたが、どれもうまくいきませんでした。
私は以下のようにコードを書きます。
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'))