読者です 読者をやめる 読者になる 読者になる

CGI::Cookie.parseの改良

Ruby cgi.rb

CGI::unescapeが引数にencodingをとれるようになりましたので、
cookieのparseで使うように実装してコミットしました。

fujioka@dhcp160:~/build/ruby19% irb -rcgi
irb(main):001:0> cookie = CGI::Cookie.parse("name1=val1&%26%3C%3E%22&%E6%9D%BE%E6%B1%9F; path=")
=> {"name1"=>["val1", "&<>\"", "松江"], "path"=>[]}
irb(main):002:0> cookie["name1"].map(&:encoding)
=> [#<Encoding:UTF-8>, #<Encoding:UTF-8>, #<Encoding:UTF-8>]
irb(main):003:0> cookie["name1"].map
=> #<Enumerator: ["val1", "&<>\"", "松江"]:map>

CookieのASCII文字列を分解し、クラス変数の
@@accept_charsetのエンコーディングに変換しようとします。
変換できない場合は諦めます。
@@accept_charsetは
CGI.accept_charset="EUC-JP"
などでも変更できますが、しょっちゅう変更するようなものではありません。