TRY AND ERRΦR

気になったこと、勉強したこと、その他雑記など色々メモしていきます。。Sometimes these posts will be written in English.,

Python3 with djangoでエクセルで文字化けしないcsvをダウンロードさせる

よくあるcsvダウンロード機能ですが、エクセルで開くことを想定して作らなければいけないケースが多々あると思います。
今回、エクセルで開いた時に日本語が文字化けしないcsvのダウンロード機能をpythonで書いてみます。
使っているフレームワークDjango

標準のcsvモジュールだとunicodeがサポートされていないとのことなので、unicodecsvを使います。
GitHub - jdunck/python-unicodecsv: Python2's stdlib csv module is nice, but it doesn't support unicode. This module is a drop-in replacement which *does*. If you prefer python 3's semantics but need support in py2, you probably want https://github.com/ryanhiebert/backports.csv

unicodecsvはpipでインストールできます。

pip install unicodecsv


基本的には標準のcsvモジュールと似ていますね。

from django.http import HttpResponse
import unicodecsv as csv

def csvdl(request):
    ret = HttpResponse(content_type="text/csv")
    ret["Content-Disposition"] = "attachment; filename=name.csv"
    w = csv.writer(ret, encoding='cp932')
    w.writerow(["あいう", "えお", ...])    
    return ret

encoding='cp932'を使えるところがミソ!!