プログラムの話しでっす。
結論
csvモジュールで書き込みする時は、unicode型はダメです。 str型で文字コードがUTF-8なもので統一しましょう。
サンプル
# coding=utf-8 import csv sample_header = [u"col{}".format(i) for i in range(1, 6)] sample_data = [ [u"あ", u"い", u"う", u"え", u"お"] ] with open('/tmp/sample.csv', "wb") as fh: writer = csv.writer(fh, lineterminator=u'\n') writer.writerow(sample_header) for row in sample_data: row = [x.encode("utf-8") for x in row] writer.writerow(row)
ざっくり解説
元のデータがunicode型で渡ってきて(サンプルの sample_data
のように)
そのまま書き込もうとすると以下のようなExceptionを吐きます。
Traceback (most recent call last): File "sample.py", line 14, in <module> writer.writerow(row) UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042' in position 0: ordinal not in range(128) [Finished in 0.264s]
unicodeで渡ってきた時には .encode("utf-8")
すれば str型になるので csv モジュールもすんなり飲み込んでくれるようです。