どちらかというとごはん派

主に仕事用のメモブログ。

【java】 リクエストの文字化けをjava側で回避する

2009年01月13日 10時57分53秒 | java
リクエストの値に日本語が使用された場合、
文字化けして設定されている場合がある。

Tomcatの設定で回避するのがセオリーだが、
うまくいかない場合に以下のロジックでjava側で対処する。

 // リクエストの値を取得する
 String str = request.getParameter("keyword");
 try {
  // ①リクエストの値をバイトデータに戻す。
  byte[] byteData = str.getBytes("ISO_8859_1");

  // ②戻したデータを、エンコードする。
  str = new String(byteData, "Shift_JIS");

 } catch (UnsupportedEncodingException e) {
 }
 return str;

今回の場合、
・リクエストの値 = Shift_JIS
・javaの扱うエンコード = ISO_8859_1
リクエストとjavaが違うエンコードのためにおきた文字化け。

①リクエストの値をバイトデータに戻す。
 Shift_JISの文字列をISO_8859_1で取得するから文字化けがおこった。
 まず、ISO_8859_1でバイト単位にばらす。

②バイト単位にばらしたものを正しいエンコードShift_JISで組み立て直す。