2.6.8 デフォルトの文字エンコーディングの注意事項
デフォルトの文字エンコーディングの適用については,次の点に注意してください。
- 〈この項の構成〉
(1) レスポンスへのデフォルトの文字エンコーディングの設定の可否について
次の場合は,レスポンスへのデフォルトの文字エンコーディングの設定は有効になりません。
-
静的コンテンツの拡張子が,webserver.static_content.encoding.extensionパラメタ※1に指定した拡張子以外の場合
-
Servlet仕様で規定されたエラーページの静的コンテンツに対して,レスポンスへのデフォルトの文字エンコーディングを設定しない場合※2
- 注※1
-
デフォルトの文字エンコーディングを適用させる静的コンテンツの拡張子を指定するためのパラメタです。
- 注※2
-
次のどちらかの条件のあとに出力された静的コンテンツの場合は,レスポンスへのデフォルトの文字エンコーディングの設定が有効になります。
-
レスポンスに対して文字エンコーディングを設定しない場合で,サーブレット,JSP,フィルタなどで,javax.servlet.ServletResponseクラスのgetWriterメソッドによってjava.io.PrintWriterオブジェクトが取得されるとき。
-
setAttributeメソッドが実行されても,リクエストオブジェクトがラップされる場合で,そのリクエストオブジェクトが,setAttributeメソッドを呼び出さないリクエストラッパでラップされるとき。
-
なお,HTTPレスポンス圧縮フィルタを使用している場合は,レスポンスへのデフォルトの文字エンコーディングの設定は有効になりません。
(2) getCharacterEncodingメソッドに適用される文字エンコーディング
Servlet仕様で文字エンコーディングを設定していない場合,次に示すServlet APIのメソッドには,J2EEサーバ単位またはWebアプリケーション単位で設定したデフォルトの文字エンコーディングが適用されます。
-
javax.servlet.ServletRequestのgetCharacterEncodingメソッド(リクエストの場合)
-
javax.servlet.ServletResponseのgetCharacterEncodingメソッド(レスポンスの場合)
ただし,setCharacterEncodingメソッドで文字エンコーディングを変更しているときは,setCharacterEncodingメソッドで変更した文字エンコーディングが取得されます。
また,レスポンスの場合,javax.servlet.ServletResponseのresetメソッドを使用してレスポンスデータを初期化したときは,getCharacterEncodingメソッドで取得できる文字エンコーディングは,アプリケーションサーバで設定した文字エンコーディングとなります。
なお,Servlet仕様での文字エンコーディングの設定方法については,「2.6.5 デフォルトの文字エンコーディングの実装(Servlet仕様の場合)」を参照してください。
(3) XML宣言内の文字エンコーディング
JSPドキュメントおよびXML形式のタグファイルで,WebコンテナがXML宣言を自動生成する場合,XML宣言内の文字エンコーディングの宣言には,レスポンスボディのエンコードに適用されたデフォルトの文字エンコーディングが出力されます。
(4) JSPファイルへの文字エンコーディングの適用
JSPファイルへの文字エンコーディング設定は,JSPファイルのコンパイル時に適用されます。このため,すでにJSPファイルがコンパイルされている状態で,文字エンコーディングの設定を追加または変更しても,追加または変更した文字エンコーディングはJSPファイルに反映されません。設定を反映させるためには,再度,コンパイルを実施してください。