« mod_wgsiでApacheからPythonでWebプログラムを呼び出す | トップページ

2011/08/23

PythonのWSGI記事のサンプルプログラムが動かない件

WSGIとPythonでスマートなWebアプリケーション開発を
第2回 WSGIを使ったもう少し複雑なアプリケーションの作成

WSGIについて解説されている日本語サイトは少ないので非常に価値の高いページなんですが
サンプルプログラムが結局、日本語で動かないです。
直したって書いてありますが、実行して日本語でPOSTしてみると

UnicodeEncodeError: 'ascii' codec can't encode characters

というエラーが発生しちゃいます(Mac OS X 10.7.1標準のPython 2.7.1にて確認)

該当するスクリプトの問題は

tmp[key] = str(esc(unicode(value, 'utf-8', 'ignore')))

ここです。

valueをunicodeでutf8にして
エスケープして
それをstr型に変換する

というコードなんですが
unicodeで変換した時点で型はunicodeです。

unicodeからstrに変換しようとするとこのエラーがでます。

サンプル。
u = unicode("てすと", 'utf-8')
s = str(u)
これを実行すると同様のエラーがでます。

pythonは型について、非常にチェックが厳しい言語です(私は良い意味でとらえてます)
str型にする際にはちゃんと、encode関数で文字コードを指定してあげなければいけません。

s = str(u.encode('utf-8'))

これならOK!

というわけで、リンク先記事のプログラムは

tmp[key] = str(esc(unicode(value, 'utf-8', 'ignore')).encode('utf-8'))

とすればちゃんと動きます。

pythonにおける文字コードの良い勉強になりました。

« mod_wgsiでApacheからPythonでWebプログラムを呼び出す | トップページ

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12417/52548268

この記事へのトラックバック一覧です: PythonのWSGI記事のサンプルプログラムが動かない件:

« mod_wgsiでApacheからPythonでWebプログラムを呼び出す | トップページ