S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

Ajaxのリクエスト/レスポンスはUTF-8

で、HTMLのフォームは、Windows-31Jだったりする訳で。
なので、いつも通りにSetChatacterEncodingFilterを使ってWindows-31JUnicode変換をする訳で。
その上で、Ajax4jsfのFilterを継承したFilterで、Ajaxのリクエストの場合はrequest.setCharacterEncoding("UTF-8")ってな感じで、UTF-8Unicode変換を入れてみる。
しかし、Ajaxのリクエストのパラメータは化けた(UTF-8)まま。
なんでだ?なんでだ?と調べてたら、こんな一文を見つけてみたり。

If you know that you're running on a Servlet 2.3 environment (like Tomcat
4), you can call request.setCharacterEncoding() *before* calling any of
the getParameter() methods, and Tomcat will do the translation for you.

えええ???
getParameter()メソッド呼ぶ前じゃないと、setCharacterEncoding()って有効になんないってこと???
と思って、Filterの順番を入れ替えて、1番最初のFilterでAjaxのリクエストの場合にUTF-8Unicode変換するようにしたらOKに。
これってTomcatの仕様というより、Servletの仕様ってことかな?


ということで、この時の挙動もただ文字化けしてただけってことらしい…
http://d.hatena.ne.jp/S_a_k_U/20070322#p1


■参考サイト
ITMedia > Ajaxを理解する4つのポイント (1/6)
http://www.itmedia.co.jp/enterprise/articles/0608/10/news019.html
Mailing list archives > Re: Switching on UTF-8 Encoding
http://mail-archives.apache.org/mod_mbox/tomcat-users/200202.mbox/%3C20020207201431.P90762-100000@icarus.apache.org%3E