Posted by & filed under programming.


大学の講義でServletとJSPの勉強を始めたので,自宅サーバーにも環境を構築していろいろ遊んでみることにした.

構築後,テストの為に講義で使ったjspを実行してみると,なぜか文字化けが起こる.

文字化けが起こる部分はGETリクエストで取得したデータ部分.

ちゃんと,getParameterで取得する前に,

<%
request.setCharacterEncoding("UTF-8");
String strdat1 = request.getParameter("hoge");
String strdat2 = request.getParameter("piyo");
String strdat3 = request.getParameter("foobar");
%>

こんな感じで文字コードを指定しているはずなのに,ダメ.

.

調べてみた結果,Tomcat 5以上からはデフォルトではsetCharacterEncodingが有効になっていない事が分かった.

なんでそんな事をしたのかは理解できないが,とにかく,そういうことらしい.

ということで,server.xmlの<Connector>内に

useBodyEncodingForURI="true"

の記述を追加.

あと,URIEncodingという項目で,GET時のエンコードを指定できるようなので,指定しておいた.

URIEncoding="UTF-8"

ちなみに,両方を<Connector>に記述している場合,setCharacterEncodingで指定されたものを優先するみたい.

.

設定変更後,Tomcatを再起動して動作確認したところ,文字化けせずに表示された.

ちなみに,このsetCharacterEncodingが無視されるのは,GETの場合のみ.POSTは有効になっているらしい.

ということで,管理者でない場合はPOSTでデータを送るか,

String val = new String(request.getParameter("hoge").getBytes("ISO_8859_1"), "UTF-8");

これを使うかのどっちかになる.

.

[参考] http://www.javaroad.jp/servletjsp/sj_servlet13.htm