LolipopでPythonのCGIを動かすと
どうやら普通にprint文で日本語を記述してもエラーになって表示できない。
#原因
標準出力がパイプ扱いになってエンコードの指定が無視されてらしい
wk.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, locale, codecs
print "Content-Type: text/html\n\n"
print 'sys.stdin.encoding: %s\n\n' % sys.stdin.encoding
print 'sys.stdout.encoding: %s\n\n' % sys.stdout.encoding
print '%s\n\n' % sys.getfilesystemencoding()
print '%s\n\n' % sys.getdefaultencoding()
print '%s\n\n' % sys.stdin.encoding
print '%s\n\n' % sys.stdout.encoding
print '%s\n\n' % sys.stderr.encoding
を実行すると、下記の結果になる。
sys.stdin.encoding: None
sys.stdout.encoding: None
ANSI_X3.4-1968
ascii
None
None
None
#解決策
強制的にエンコードを使って、print文の出力先の変更する。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, locale, codecs
print "Content-Type: text/html\n\n"
wk = u"日本語を表示"
Writer = codecs.getwriter('utf-8')
stdout = Writer(sys.stdout)
print >>stdout, u"%s" % (wk)
結果として下記の行が表示される。
日本語を表示