文字コードの話はすぐに混乱するからまとめておく必要がある。以下の話は下書きなので信用してはいけません。 !!!バイト列からStringを作る バイト列からStringを作るときは、そのバイト列を読み込むためのエンコーディングを指定する。 java.lang.String(byte[] bytes, String charsetName) ん、エンコーディングじゃなくて文字セットになってるなあ。 文字セットについては[java.nio.charset.Charset|http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/nio/charset/Charset.html]に説明があるが分かりにくい。 「[サポートされているエンコーディング|http://java.sun.com/j2se/1.4/ja/docs/ja/guide/intl/encoding.doc.html]」ではエンコーディングという言葉が使われているなあ。区別しているのだろうなあ。ここの一覧には「Windows-31J」や「Shift_JIS」がないが、これらも使えるようだ。よく分からん。 !!参考 *[Shift_JISのエイリアスの変更について|http://www.ingrid.org/java/i18n/encoding/shift_jis.html] *[Java Encoding & Aliases Table|http://www.ingrid.org/java/i18n/encoding/table-j.html] (古いのかも) !!!Servletでブラウザから送られてきたパラメータを取得する 例えば、javax.servlet.ServletRequest.getParameter()で取得するのだろう。これを呼び出す前に同クラスのsetCharacterEncoding()でエンコーディングを指定しておくのかな。これを指定していない場合はデフォルトで「ISO-8859-1」が使われるようだ。 (→→ デフォルトがISO-8859-1なのはHTTPの仕様のようだ(JavaWorld 2003.7号より)。[これ|http://www.studyinghttp.net/rfc_ja/2616/sec3.html#sec3.7.1]かな。) でもStrutsを使う場合はプログラマが直接ServletRequestを触ることはなくて、Strutsが勝手にActionFormビーンにパラメータをセットしてしまう。Strutsに任せると「ISO-8859-1」を使ってしまうのだろうからActionFormビーン内で文字コードを変換する必要があると思われる。ActionFormのreset()内でRequestのsetCharacterEncoding()を呼ぶのか、なるほど。或いは、Struts1.1ならorg.apache.struts.action.RequestProcessor.processPreprocess()をオーバーライドすればよいようだ。こちらの方が一箇所で済むから楽だね。 あとはServletフィルタを使う手もあるのか。これが王道?お、[TomcatにはSetCharacterEncodingFilterというのが付いている|http://www.kakutani.com/wiki/java/?GarbledCharacters]らしい。 !!参考 *[ServletとJSPにおける文字化けについて|http://www.ingrid.org/java/jserv/i18n/corruptedchar.html#getparameter] *[文字化け“???”の法則とその防止策|http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html] *[GarbledCharacters|http://www.kakutani.com/wiki/java/?GarbledCharacters] *JavaWorld 2003年6月号 *Jakartaプロジェクト徹底攻略 !!!その他参考 *[文字化けするんですけど…|http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/programming/mojibake.html] (Servlet Garden) {{comment}} {{category ただのメモ}}