「サーブレット2.3における文字エンコーディングの指定」でも説明したように、JSP&サーブレットではリクエストデータに2バイト文字が含まれている場合に、デフォルトではこれを正しく扱うことができません。
そこで、サーブレット2.3以降対応のコンテナではHttpServletRequest#setCharacterEncodingメソッドを用いてリクエストデータにおける文字コードを明示的に宣言する必要があるわけですが、残念ながらこの方法、サーブレット2.2以前の環境では使用することができません。サーブレット2.2では、少々面倒ではありますが、自ら文字エンコーディングを変換するユーザー定義メソッドを用意する必要があります。
リクエストデータの文字コードを変換するユーザ定義メソッドは、以下のように記述します。
public static String transferEncoding(String strVal) throws UnsupportedEncodingException { if(strVal==null){ return (null); }else{ return (new String(strVal.getBytes("ISO-8859-1"),"Shift_JIS")); } }
ユーザー定義メソッドtransferEncoding(名前はもちろん何でも構いません)は、パラメータとして与えられた文字列をいったんISO-8859-1(Latin-1)の文字列としてバイト列に変換し、あらためて(本来の文字コードである)Shift-JISの文字列として再構築します。「Shift-JIS」の部分は「EUC-JP」や「ISO-2022-JP(JIS)」、「JISAutoDetect(自動判定)」とすることも可能です。
リクエストデータの読み込み側では、transferEncodingメソッドを使用して、以下のように記述するだけです。
<%=transferEncoding(request.getParameter("name")) %>
なお、ユーザー定義メソッドは各JSP/サーブレット内で記述してももちろん構いませんが、全ページ共通で使用する性質のものであることからも、インクルードファイル、またはクラスとして外部ファイル化しておくことをお薦めします。
Copyright © ITmedia, Inc. All Rights Reserved.