[JSP] tomcatの日本語を含んだクエリが文字化けする場合の解消法

tomcat文字化け
<form method="GET" action="test.">
	名 前:<input type="text" name="nam" />
</form>

で日本語を取得しようとした際に、インプットに入力された日本語が文字化けしました。
JSPの文字コード環境は 「」 です。
クエリの取得には<% request.setCharacterEncoding("UTF-8"); %>と「UTF-8」を指定しています。

tomcatはクエリ情報の解析で request.setCharacterEncoding で指定された文字コードは適用しない仕様になっているそうです。
なのでクエリは ISO-8859-1(Latin-1) の文字コードで処理されるため文字化けが発生。

4.x以前の場合はこのような文字化けは発生しないようです。5以降から導入された仕様だそう。

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」で取得され文字化けが解消されました。

You may also like...

2 Responses

  1. 光義 より:

    tomcat 9.0では文字化けします。

  2. 光義 より:

    useBodyEncodingForURI=”true”で文字化けは解決しました。
    お騒がせしました、申し訳ございません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です