JSTL リファレンス

<fmt:requestEncoding>
xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"

SYNOPSIS

<fmt:requestEncoding
value="文字エンコーディング"
/>

説 明

リクエストの文字エンコーディングを設定します。 サーブレット仕様でのデフォルト文字エンコーディングは ISO-8859-1 ですが、この機能に適切な エンコーディングを指定することで ISO-8859-1 以外でエンコードされたリクエストパラメータを 正しく復元することができます。

通常、リクエストパラメータはリクエストを送信したページの文字エンコーディングで送られてきます。 しかしリクエストの受け側では元のページがどのようなエンコーディングだったかは分かりません。 本来ならリクエストの Content-Type ヘッダでパラメータのエンコーディングを指定する 必要がありますが、ほとんどのブラウザはその動作に対応していません。

この動作はリクエストからパラメータを使用する前に行っておく必要があります。 POST メソッドで送られるデータはストリーム形式であり一度しか解析できません。 このため、一度間違ったエンコーディングで復元してしまうと、正しいエンコーディングを指定しても パラメータを再構築できないためです。

またこのタグでエンコーディングを指定しても効果がない場合は、JSP より前のサーブレットフィルタ などでパラメータを参照してしまっている可能性があります。

属 性

value="文字エンコーディング"
optional

リクエストの文字エンコーディングを指定します。 この属性が省略された場合は以下の優先順位でエンコーディングを決定します。

  1. Content-Type リクエストヘッダの charset 属性
  2. セッションスコープ変数 javax.servlet.jsp.jstl.fmt.request.charset
  3. サーブレット仕様のデフォルトエンコーディング (ISO-8859-1)

使用例

value 属性を省略した場合は セッションスコープの変数 javax.servlet.jsp.jstl.fmt.request.charset がリクエストエンコーディングとして使用されます。
JSP
<c:set
  var="javax.servlet.jsp.jstl.fmt.request.charset"
  value="MS932" scope="session" />
前: <%= request.getCharacterEncoding() %><br>
<fmt:requestEncoding/>
後: <%= request.getCharacterEncoding() %>
実行結果
前: null
後: MS932
CVS 2008/03/09