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'を使えるところがミソ!!