Shoken Startup Blog

KitchHike Founder/CTO

UnicodeEncodeErrorの解決方法

エラー文

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

結論を先に書きますと、下記のページのやり方で解決できました。
[Python] UnicodeEncodeErrorが発生した場合は、sitecustomize.pyでデフォルトのエンコーディングを指定する。 - SumiTomohikoの日記

上記の記事の環境は、Ubuntu 6.10, Python 2.4ですが、私の環境 Ubuntu 7.04, Python 2.5でも全く同じでした。


以下引用

解決方法

以下の/usr/lib/python2.4/site-package/sitecustomize.pyを作成してください。

import sys
sys.setdefaultencoding('utf-8')


詳細

デフォルトのエンコーディングは、以下のようにして確認できます。

$ python
Python 2.4.4c1 (#2, Oct 11 2006, 21:51:02)
[GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'


sitecustomize.pyは、pythonが起動したときに読み込まれるモジュールです。この中で、python全体の設定を行うことができます。デフォルトのエンコーディングを正しく設定した場合、問題の現象は以下のようになります。

$ python
Python 2.4.4c1 (#2, Oct 11 2006, 21:51:02) 
[GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
<<