Python2.xのprint文は、unicode型をstr型に暗黙変換してから標準出力をします。
unicode --> str へ変換する際のエンコードは locale.getpreferredencoding() で決まります。
試してみる
↓MacのTerminalからPython実行してみたとき。
>>> import locale
>>> locale.getpreferredencoding()
'UTF-8'
>>> print u'あああ'
あああ
↓Windows7のコマンドプロンプトからPython実行してみたとき。
>>> import locale
>>> locale.getpreferredencoding()
'cp932'
>>> print u'あああ'
あああ
↓EclipseのPyDev ConsoleからPython実行してみたとき。
>>> import locale
>>> locale.getpreferredencoding()
'US-ASCII'
>>> print u'あああ'
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
特殊な環境でasciiだったので u'あああ' はUnicodeEncodeErrorエラーになります。
指定したエンコーディングで変換してほしい
あえてエンコーディングを指定したい場合、以下の方法で出来ます。
>>> import sys, codecs
>>> sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
>>> print u'あああ'
あああ
エラーを出さないようにする
バグを隠蔽してしまう可能性大ですが...
_ENC_LOCALE = locale.getpreferredencoding()
sys.stdout = codecs.getwriter(_ENC_LOCALE)(sys.stdout, errors='replace')
sys.stderr = codecs.getwriter(_ENC_LOCALE)(sys.stderr, errors='replace')