PythonでUnicodeEncodeError: 'ascii' codecがでた場合の対処方法

Pythonはデフォルトのエンコーディングを指定しないと、UnicodeEncodeErrorが発生する場合があります。

今回はその解決方法について記載します。4つ環境を用意してみました。

エラー例

# python
Python 2.6.6 (r266:84292, Jan  3 2011, 14:20:44)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = u'てすと'
>>> str(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

環境

次の環境で実施しました。4つの環境で試しています。

1.Python2.4

CentOS5.5
Python2.4(標準インストール)

2.Python2.6

CentOS5.5
Python2.6

3.Python2.7

CentOS5.5
Python2.7

4.Pinax0.7.1バンドル版

CentOS5.5
Pinax0.7.1/Python2.6




設定方法


以下のディレクトリに「sitecustomize.py」を作成してください。

1.Python2.4(標準インストール)

/usr/lib/python2.4/site-packages/

2.Python2.6

/usr/local/lib/python2.6/site-packages/

3.Python2.7

/usr/local/lib/python2.7/site-packages/

3.Pinax0.7.1バンドル版

/home/hoge/pinax-env/lib/python2.6/site-packages/

注:/home/hoge/pinax-env/にpinax0.7.1をインストールした場合。



詳細内容

sitecustomize.pyに

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

を記載してください。



結果

このようになれば成功です。

# python
Python 2.6.6 (r266:84292, Jan  3 2011, 14:20:44)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = u'てすと'
>>> str(s)
'\xc3\xa3\xc2\x81\xc2\xa6\xc3\xa3\xc2\x81\xc2\x99\xc3\xa3\xc2\x81\xc2\xa8'