[Python]UnicodeEncodeErrorの対処
Pythonで日本語を利用しているとき、unicode文字列をstr関数に渡すとUnicodeEncodeErrorが起きます。
例えば以下のコードを実行すると次のようなエラーが出てきます。
コード
#!/usr/bin/python # -*- coding: utf-8 -*- test = u"テスト" print str(test)
エラー
Traceback (most recent call last): File "pygame_base_template.py", line 5, in <module> print str(test) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
正直なぜこのようなエラーが起こるのか把握してないのですが、解決方法は簡単です。
解決方法1
コード内においてsysモジュールをリロードしてデフォルトエンコーディングを指定。
例えば以下のように記述します。
#!/usr/bin/python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") test = u"テスト" print str(test)
解決方法2
site-packageフォルダ以下にsitecustomize.pyファイルを作成し、デフォルトエンコーディングを記述。
具体的には、/usr/lib/python2.4/site-package/sitecustomize.py を作成し、sitecustomize.pyの中に以下のように記述します。
import(sys) sys.setdefaultencoding("utf-8")
解決方法1は毎回コードに記入する感じで、解決方法2は一回作成すれば同一環境では気にしなくてよくなります。
個人的には作業環境に依存せずに使える解決方法1を利用してます。
自宅PCで設定を変更するのは問題ないですが、職場だと勝手に変更できないですからね。
Pythonを書くときはエディタを開いたら取り合えず上記5行とメイン関数をコピペしてから書き出します。
#!/usr/bin/python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") def main(): pass if __name__ == "__main__": main()
この辺の細かな定形化はストレスなくコードを書くためには結構重要だと思います。