次の Python スクリプトがあります。
# -*- coding: utf-8 -*-
import sys, locale
locale.setlocale(locale.LC_ALL, 'en_US.utf8')
print '肥皂' # This works
print u'肥皂'
スクリプトを実行すると、次のようになります。
肥皂
Traceback (most recent call last):
File "../pycli/samples/x.py", line 5, in <module>
print u'肥皂'
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)
ただし、シェルで LC_ALL 環境変数を明示的に設定すると、機能します
export LC_ALL=en_US.utf8
では、なぜ setlocale() が同じ効果を持たないのだろうか?