私は単純なmysql DBからデータを取り出し、PythonとFlaskで表示する小さなweb-appを作成しました。データベースのテキストフィールドはutf8_general_ciとしてエンコードされ、一部には特殊文字(「Zürich」など)が含まれています。App Engineは文字エンコーディングをオンラインとローカルで異なる方法で処理しますか?
Flask/Jinja2 like to work on unicodeのように、クエリの後、文字列はユニコードに変換されてテンプレートに渡されます。不思議なのは、コードがローカルで実行されているか(Macラップトップ)、GAEにデプロイされているかによって、ユニコードに変換する別の方法が必要です。
ローカルで実行しているとき、これは動作します:GAE上で展開したとき
return [[unicode(c, encoding='utf-8') if isinstance(c, basestring) else c for c in b] for b in l]
これは動作します:
return [[unicode(c, encoding='latin-1') if isinstance(c, basestring) else c for c in b] for b in l]
。
GAE版をローカルで実行すると、「Zürich」が「Zürich」と表示されます。逆もありますが、UnicodeDecodeエラーが発生します。
私の知る限り、2つのデータベースは同じです。オンライン版は、ローカル版のストレートダンプです。