<form method="GET" action="test.jsp"> 名 前:<input type="text" name="nam" /> </form>
で日本語を取得しようとした際に、インプットに入力された日本語が文字化けしました。
JSPの文字コード環境は 「UTF-8」 です。
クエリの取得には<% request.setCharacterEncoding("UTF-8"); %>
と「UTF-8」を指定しています。
tomcatはクエリ情報の解析で request.setCharacterEncoding で指定された文字コードは適用しない仕様になっているそうです。
なのでクエリは ISO-8859-1(Latin-1) の文字コードで処理されるため文字化けが発生。
tomcat4.x以前の場合はこのような文字化けは発生しないようです。tomcat5以降から導入された仕様だそう。
目次
tomcatのクエリ情報の文字化けは server.xml を修正
server.xmlの場所:「tomcatディレクトリ/conf/server.xml」
特に何もいじっていなければ72行目付近に以下の記述があると思います。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
これを以下のように変更。最後に一文増えています。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" />
記述後はtomcatを再起動させてください。
これでクエリから取得した文字が「UTF-8」で取得され文字化けが解消されました。
コメント
コメント一覧 (2件)
tomcat 9.0では文字化けします。
useBodyEncodingForURI=”true”で文字化けは解決しました。
お騒がせしました、申し訳ございません。