pythonでutf8のテスト

対話コンソールで色々と試してみる。

$python
Python 2.4.3 (#1, Jan 7 2007, 23:46:57)
...

>>> u'\U3042'
u'\u3042'
>>> print u'\U00003042'

>>> print "-".join(u'\U00003042'*3)
あ-あ-あ
>>> print ord(u'\U3042')
12354
>>> unichr(12354)
u'\u3042'
>>> print unichr(12354)

unicodeunicodeコードポイントとutf8とstrとバイト配列と、
それぞれ違うらしいのだが、正直面倒くさい。
パイプでunicodeを扱うと通常エラーになるらしい。

$ python -c "print u'\u3042'"

$ python -S -c "print u'\u3042'"|cat
Traceback (most recent call last):
File "", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042' in position 0: ordinal not in range(128)
$ python -c "print u'\u3042'.encode('utf8')"|cat

色々調べるとgoogle-appengine環境やpipeを通すときは結局reload(sys)が手っ取り早いようだ。

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

…でOKかと思ったがやはりpipeで出力時にエンコード指定しないとエラーになる。ascii決め打ち出力してる。
なんか回避策あるのかな。