<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