Windows+Apache(PythonはCGIで動作)環境でweb.pyでGETの引数に日本語を渡そうとしたらうまくいかなかった(UnicodeDecodeError)ので調べてみた.
元をたどってみるとos.environ['PATH_INFO']を参照しているが,この環境ではos.environはasciiなので?化けた文字列が返ってくることが判明.
web.application.load()内,ctx.path = env.get('PATH_INFO')の後に以下のように追記.
if env.get('SERVER_SOFTWARE', '').startswith('Apache') and sys.platform == 'win32':
ctx.path = lstrips(env.get('REQUEST_URI').split('?')[0], ctx.homepath)
ctx.path = urllib.unquote(ctx.path)
mod_rewriteでリダイレクトしている場合は,ctx.homepathを正しく書き戻す必要がある.
web.py で REAL_SCRIPT_NAME を設定を参照.
sqlite3において,web.db.select()のvarsにunicode文字列を含む辞書を与えた時にProgrammingErrorに遭遇.web.db._db_execute()が原因で,cur.executeの第1引数にunicode文字列,第2引数に
UTF-8を投げている模様.web.db.SqliteDB._py2sql()のencodeの行をコメントアウトすることで動作.
・・・便利だけど疲れました.(2009/03/02)