1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

python2系でのcsv出力文字化け

Posted at

python2系でcsv形式で保存したファイルをexelなどを使って表示しようとするとよく文字化けが起きるのでその時の対策メモ

これだと文字化ける

# -*-coding: utf-8 -*-
import csv

with open('test.csv', 'w') as f:
  writer = csv.writer(f, lineterminator='\n')
  writer.writerow(['日本語でおk?', 'ダメ?'])

色々なサイト見るとどうやらエクセルで読み込むにはBOMという情報付きのutf-8にする必要があるらしく、簡単にはutf-8-sigでエンコードしてやれば良いらしい。

のでimport codecsを加えてやってみる

# -*-coding: utf-8 -*-
import csv
import codecs
with codecs.open('test.csv', 'w', 'utf-8-sig') as f:
  writer = csv.writer(f, lineterminator='\n')
  writer.writerow([u'日本語でおk?',u'ダメ?'])

だが怒られる

Traceback (most recent call last):
  File "text.py", line 25, in <module>
    writer.writerow([u'日本語でおk?',u'ダメ?'])
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

こうするともっとひどい

# -*-coding: utf-8 -*-
import codecs
with codecs.open('test.csv', 'w', 'utf-8-sig') as f:
  writer = csv.writer(f, lineterminator='\n')
  writer.writerow(['日本語でおk?', 'ダメ?'])
Traceback (most recent call last):
  File "text.py", line 25, in <module>
    writer.writerow(['日本語でおk?','ダメ?'])
  File "/usr/lib/python2.7/codecs.py", line 688, in write
    return self.writer.write(data)
  File "/usr/lib/python2.7/codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
  File "/usr/lib/python2.7/encodings/utf_8_sig.py", line 82, in encode
    return encode(input, errors)
  File "/usr/lib/python2.7/encodings/utf_8_sig.py", line 15, in encode
    return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

結局以下のようにしてcsvを外すしかありませんでした。

# -*-coding: utf-8 -*-
import codecs
f = codecs.open('test.csv', 'w', 'utf-8-sig')
f.write(u'日本語でおk?,ダメ?')
f.close()

こんなサイトもあるぐらいだし、ホントの所が知りたい…
csvモジュールがUnicode入力をサポートしていない罠 - bonlife

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?