
普通に実装していると様々な要因で文字化けますが、それを防ぐ際に、JSP、サーブレットでは様々な記述方法があります。
画面に表示する際の文字化けを防ぐ
コンテンツタイプ
Tomcatでは、デフォルトで、文字コードとして「ISO-8859-1」が使われているのでデフォルトで日本語は文字化けが発生します。
サーブレットで、日本語を画面に出力させたい場合は下記のように指定すると思います。
サーブレットで指定する場合
response.setContentType("text/html; charset=UTF-8");
JSPで指定する場合
<%@page contentType="text/html; charset=UTF-8" %>
MIMEタイプ
テキストや、HTML、画像等、インターネット上でやり取りされるデータの種類を指定します。
一般的な、Webアプリケーションでは、「text/html」を指定するのがほとんどでしょう。
文字エンコーディング
明示的に出力する文字コードの種類を指定します。上の例では、「UTF-8」を指定しています。
画面で入力した文字が、サーブレットで文字化けるのを防ぐ
※本設定で、影響があるのはGETリクエストの場合のみになります。POSTリクエストは影響しません。
POSTとGETの違いは下記の記事で解説しています。
JSPで、文字化けを防ぐには、「pageディレクティブ」により文字コードを指定すると解説させて頂きました。
画面で入力したデータは、URLで渡すために、URLエンコードが行われます。(「pageディレクティブ」で指定した文字コードによってエンコードがなされます。)
サーブレットで、直接URLエンコードされた入力パラメータを、getParameterメソッド等で、そのまま取り出すと文字化けます。
これは、同じくTomcatのデフォルトの文字コードである「ISO-8859-1」で自動で入力パラメータから、値を取り出そうとするためです。
なので、URLで入力パラメータを取り出す場合は、requestオブジェクトに対して、サーブレットで下記の構文を使って文字コードを変更してあげる必要があります。
request.setCharacterEncoding("UTF-8");
※必ず、getParameterメソッドを使う前に、上記の宣言を行うようにしましょう!
この記事へのコメントはありません。