Home > 技術 > ServletにおけるGETパラメータの文字化けについて

ServletにおけるGETパラメータの文字化けについて

WebブラウザからGETパラメータを送信し、それを再び自画面にResponseするような処理の場合、日本語が入ってきた場合を考慮しなければなりません。
日本語を許容していないテキストボックスなら良いのですが、~Nameとかの場合には日本語が入ってしまいます。

この場合単純にURLの後ろにGETパラメータを付与した状態でサーバー側に送信しても文字化けを起してしまいます。

たとえば
JavaScript側で


window.open('test.do?param=' + encodeURIComponent("テスト"));

といった感じで画面を開いて、開き先の画面でこの「テスト」を表示しようとしてもうまく表示されません。
これはServlet側で受け取ったGETパラメータ「param」を、javax.servlet.ServletRequestクラスのgetParameterメソッドを使用して取得すると、パラメタの中身をISO-8859-1だと誤解してURLデコードしてしまうためです。

ただし化ける現象はServletコンテナに依存していて


たとえば,Apache JServやJakarta Tomcatは化けますが,IBMのWebSphereは化けないなどの違いが出てきます


via: ServletとJSPにおける文字化けについて

のようです。

なのでGETパラメータで送られてきた日本語をHTML側でCharsetされた文字コードとして取得する必要があります。
そこでHttpServletRequestインタフェースのsetCharacterEncodingメソッドを使って文字コードを指定すればよいのです。

ただし、


※Tomcat5.xより、FORMのGETメソッドでパラメータを送信した場合、setCharacterEncodingメソッドを無視するようになりました。POSTメソッドの場合は有効です。


GETメソッドの場合、server.xmlファイルの<connector>タグのuseBodyEncodingForURI属性をtrueに指定することで、setCharacterEncodingメソッドを有効にできます。


via: Javaの道:Servlet(13.文字化け対策)

とのことなので、今開発している環境がTomcat5.0なので以下の方法で実装してみました。


if ((s = req.getParameter("s")) != null) {
try {
s = new String(s.getBytes("iso-8859-1"), "Shift_JIS");
} catch (UnsupportedEncodingException e) {
// エラー処理を記述する
}
}


via: ServletとJSPにおける文字化けについて

意外とややこしいので忘れがちになってしまいますが、テストしていくと正しく表示されないので気が付くのでしょう。

Trackback:0

TrackBack URL for this entry
http://hisasann.com/cgi-bin/mt/mt-tb.cgi/538
Listed below are links to weblogs that reference
ServletにおけるGETパラメータの文字化けについて from HouseTect, JavaScriptな情報をあなたに

Home > 技術 > ServletにおけるGETパラメータの文字化けについて

Tag cloud
月別アーカイブ
Powered by
Powered by
Movable Type Commercial 4.261

Page Top