URLエンコードを使ってユニコード文字列をCookieにセットする
久しぶりにHTTP Cookieなど使ってみたら、さっぱりノウハウが消えてしまっていて思わぬ苦戦をしました。理由はいろいろあるけれど、日本語など非ASCII文字列をCookieに設定する場合、URLエンコードしないといけないなど、もろもろの仕様をすっかり忘れていたことや、よくよく考えたらPythonで書いてきたCGI、CookieにはSession IDを設定するだけで、フィールドに入る文字列などはSessionに記憶させてたから、URLエンコードする必要がなかったというのも大きかった。けれど、一番の問題は、IDLEで試してもうまくいかない、urllibでもurllib2でもいいんだけど、quoteでエンコードして、unquoteで戻した文字列が、おかしくなってしまうというところであったでしょう。
ああ、最初からprint()デバッグでやりゃあよかった。
ネットで調べても、あまり情報が出てきませんでした。なのでここに記録しておこうと思います。自分も含め、誰かの助けになればと思います。
import Cookie import urllib2 cookie = Cookie.SimpleCookie() value = u'スパム' # 記録 cookie['value'] = urllib2.quote(value.encode(u'utf-8')) # 読み出し if cookie.has_key('value'): value = urllib2.unquote(cookie['value'].value) value = value.decode(u'utf-8')