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)
あ
unicodeとunicodeコードポイントと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決め打ち出力してる。
なんか回避策あるのかな。