トップ 履歴 一覧 ソース 検索 ヘルプ ログイン

文字コード

文字コードの話はすぐに混乱するからまとめておく必要がある。以下の話は下書きなので信用してはいけません。

バイト列からStringを作る

バイト列からStringを作るときは、そのバイト列を読み込むためのエンコーディングを指定する。

java.lang.String(byte[] bytes, String charsetName) 

ん、エンコーディングじゃなくて文字セットになってるなあ。

文字セットについてはjava.nio.charset.Charsetに説明があるが分かりにくい。

サポートされているエンコーディング」ではエンコーディングという言葉が使われているなあ。区別しているのだろうなあ。ここの一覧には「Windows-31J」や「Shift_JIS」がないが、これらも使えるようだ。よく分からん。

 参考

Servletでブラウザから送られてきたパラメータを取得する

例えば、javax.servlet.ServletRequest.getParameter()で取得するのだろう。これを呼び出す前に同クラスのsetCharacterEncoding()でエンコーディングを指定しておくのかな。これを指定していない場合はデフォルトで「ISO-8859-1」が使われるようだ。

(→→ デフォルトがISO-8859-1なのはHTTPの仕様のようだ(JavaWorld 2003.7号より)。これかな。)

でもStrutsを使う場合はプログラマが直接ServletRequestを触ることはなくて、Strutsが勝手にActionFormビーンにパラメータをセットしてしまう。Strutsに任せると「ISO-8859-1」を使ってしまうのだろうからActionFormビーン内で文字コードを変換する必要があると思われる。ActionFormのreset()内でRequestのsetCharacterEncoding()を呼ぶのか、なるほど。或いは、Struts1.1ならorg.apache.struts.action.RequestProcessor.processPreprocess()をオーバーライドすればよいようだ。こちらの方が一箇所で済むから楽だね。

あとはServletフィルタを使う手もあるのか。これが王道?お、TomcatにはSetCharacterEncodingFilterというのが付いているらしい。

 参考

その他参考

お名前: コメント:

[ただのメモ]