Why it doesn't work?

作業のメモ、記録をブログに残しています。

Python UnicodeDecodeErrorの対処方法

日本語を取り扱うようになってから、色々面倒なことが起きています。

あるPythonスクリプトMacで実行すると、以下のようなエラーメッセージが表示されました。
PythonのバージョンはPython 2.7。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 3: ordinal not in range(128)

デフォルトエンコーディングを確認

>>> import sys
>>> sys.getdefaultencoding()
'ascii'

はい、外部から入力された文字のコードはutf-8です。。。

デフォルトエンコーディングutf-8に変更

スクリプトに以下の三行を追加して、デフォルトエンコーディングを変更することによりエラーは発生しなくなった。

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

この方法は、スクリプトの実行環境だけで有効となります。

補足

sys.getdefaultencoding()の使用については、色々と問題があるようです。
python - Why should we NOT use sys.setdefaultencoding("utf-8") in a py script? - Stack Overflow
エンコードを変更してしまうので、当然と言えば当然ですが、かと言って解決策としての手段が「3.x系へのバージョンアップすること」では、問題があっても使用せざるを得ないですよね。。。