プログラムを記述する際の文字コード、プログラム中でデータを扱う際の文字コード、シェル(Windows ならコマンドプロンプト)に表示する(標準出力)際の文字コード、などなど考慮するポイントが複数あるのだということがわかった。
仕事で feedparser を使って RSS フィードをパースしてごにょごにょしようとしていて、コマンドプロンプトに表示はできるけれどリダイレクトでファイルに書き込もうとしたらエラーが出る、という状態だった。
ひとまず、コマンドプロンプトの文字コードを utf-8 に変更して、スクリプトの方もエンコーディングを指定するとちゃんとファイルに書き出せたので一件落着。奥が深いぜ。
Python の文字コードについて
- PythonのUnicodeEncodeErrorを知る - HDEラボ
- [至急・お礼500枚]pythonの文字のエンコーディングについて質問です。 - Yahoo!知恵袋
- Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法
- 4.9 codecs -- codec レジストリと基底クラス
- Pythonでの日本語処理:Unicode型と文字列型 - 思い立ったら書く日記
- [Python] 標準出力時に「UnicodeError: ASCII encoding error: ordinal not in range(128)」が検出 : Edo::World::Blog
- 日本語文字列コード問題まとめ — PythonMatrixJp