読者です 読者をやめる 読者になる 読者になる

ひこぽんのーと

覚書と雑記です。

pythonでのunicode型とstr型の扱いについて

pythonianな人には当たり前かもしれないが。

ファイルの読み書きでunicode文字とstr文字の絡みで、
すんなりロジック書けなくて、ここしばらく悩んでた。

ファイルを書き込む際に日本語が混ざってると発生するUnicodeEncodeError。

このページとか、
PythonのUnicodeEncodeErrorを知る - HDEラボ

このぺーじとか
Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法

読んでみてわかったような、わからんような。

なんとなく頭に入ったのは、

  • リテラルはとりあえずunicode型にしておく、
  • 日本語を含むファイルを読み書きするなら、open()ではなく、codecs.open()を使っておけ
  • ロケールエンコードを取るにはlocale.getpreferredencoding()を使え
import locale
import codecs

enc = locale.getpreferredencoding()
with codecs.open(u"aaa.txt", u"r", enc) as file:
    for line in file:
        ・・・

対処療法的で全く内容を理解していないのが、やばい。