UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 2-8: ordinal not in range(128) | Google App Engine

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 2-8: ordinal not in range(128)
なんぞこれ。

import sys
print sys.getdefaultencoding()

ascii
だそうで、これが駄目なようで。。。
通常のpythonは、
sitecustomize.py

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

を追加すればいいそうです。

app engineでは、それを各場所が無いので。直接読み込まれるファイルに書かないといけないそうです。
app.yamlに設定してあるファイルに書く必要があるそうでデフォルト main.pyでしょうか。
main.pyの先頭に

import sys
if 'ascii'==sys.getdefaultencoding():
  stdin = sys.stdin
  stdout = sys.stdout
  reload(sys)
  sys.setdefaultencoding('utf-8')
  sys.stdin = stdin
  sys.stdout = stdout

と書いてみました。
reload(sys)が無いとだめで。stdin stdoutのデータ保管も初回は無いとだめな感じで。
ローカルの場合は、1ファイルだけ更新とかあるので、何度も読み込まれないけど、本番環境は、更新時だけかな?
とりあえず。

This entry was posted on 土曜日, 5月 7th, 2011 at 6:50 AM and is filed under blog, Google App Engine, Python. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Unityによるゲームを公開しております iOS/Android
https://itunes.apple.com/jp/app/lost-knight-3d-action/id900917032
https://play.google.com/store/apps/details?id=com.groundroad.runknight

各種開発支援・機能開発等小さいお仕事などもお請けしております。
unity開発支援, PHPシステム開発, javascript/html5 フロント開発, titanium mobileアプリ開発
お気軽にお問い合わせください
大崎・五反田近郊での対面でのお打ち合わせはいつでも可能です。