2017-10-09 17 views
1

Excelでは正しく開くが、ファイルではなくStringIOを使用するCSVを生成しようとしています。StringIOがBOMを含むcsvファイルを生成しました

output = StringIO("\xef\xbb\xbf") # Tried just writing a BOM here, didn't work 
    fieldnames = ['id', 'value'] 
    writer = csv.DictWriter(output, fieldnames, dialect='excel') 
    writer.writeheader() 
    for d in Data.objects.all(): 
     writer.writerow({ 
      'id': d.id, 
      'value': d.value 
     }) 
    response = HttpResponse(output.getvalue(), content_type='text/csv') 
    response['Content-Disposition'] = 'attachment; filename=data.csv') 
    return response 

これはDjangoビューの一部です。このために、私は実際には一時ファイルをダンプすることに取り組んでいません。

私も次のことを試してみた:

response = HttpResponse(output.getvalue().encode('utf-8').decode('utf-8-sig'), content_type='text/csv') 

Excelが開きますように

は、私は、BOMと正しくutf-8-sigでエンコードされた出力ファイルを取得するために何ができるの運とファイルを表示し、複数バイトのUnicode文字を正しく表示できますか?

答えて

2

HttpResponsebytesを受け入れ:

output = StringIO() 
... 
response = HttpResponse(output.getvalue().encode('utf-8-sig'), content_type='text/csv') 

やDjangoはエンコーディングをやらせる:

response = HttpResponse(output.getvalue(), content_type='text/csv; charset=utf-8-sig') 
関連する問題