- PR -

Servletでの文字コード問題

投稿者投稿内容
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-05-22 17:23
page ディレクティブの pageEncoding や contentType で指定されるエンコードディング
はJSPがコンパイルされるときの文字エンコードや、ブラウザに出力される際に使用され
るうエンコーディングに使われます。
ブラウザがパラメータを post するときには contentType で指定したエンコードが使わ
れますが、 request.getParameter() するときに用いられるエンコードは別途指定する
必要があります。それが、ご指摘の request.setCharacterEncoding() ですね。
これは ServletAPI2.3 に準拠したアプリケーションとしては一番妥当な方法です。
ServletFilterのサンプルとしてよく使われているのを見ます。
http://www.hellohiro.com/filter.htm

全ての JSP に書いたり、フィルタを作っても良いのですが、あまりにも一般的に
行われるので、WebLogicやTomcatでは設定のみで実現できます。

・WebLogic
weblogic.xml に input-charset 要素で指定する
http://edocs.beasys.co.jp/e-docs/wls/docs70/webapp/components.html#210418

・Tomcat
filter.SetCharacterEncodingFilter を web.xml でデプロイする
http://www.nihon-eng.co.jp/c-break/TechNote/tomcat/TCAT41_Inst.htm

・Websphere
filter.SetCharacterEncodingFilter を使えるとは思いますが、なんらか
の設定でできるのではないかと思います?

>String xx = new String(文字.getBytes("8859_1"), "MS932");
>というやり方ではダメでした。
ServletAPI2.3によると、デフォルトのエンコーディングは "ISO-8859-1" でなくて
はならないとされていますので、上の方法でうまくいかないとすると、なんらかの
セッティングが働いているのかもしれませんね。
→ServletAPI2.3 SRV.4.9 Request data encoding より
getCharacterEncoding() でエンコーディングになにが設定されてるか確かめては
いかがでしょうか?仕様上は明示的に指定されていなければ null は返ってくるはずです。

>上記でも言ったようにweblogicはあくまで動作確認用サーバですので
>あまりweblogic固有の設定で解決したくはありませんでした。
老婆心ですが、各製品に仕様の解釈の違いや実装具合によってそれぞれ挙動は
異なる部分があるのをよく目にします。
開発はあくまで運用環境に合わせておくのをお勧めしますよ。
もちろん、将来に備えてポータブルなアプリケーションにしておくため各種製品で
テストしておくのはすばらしいことですが。

[ メッセージ編集済み 編集者: インギ 編集日時 2003-05-23 12:19 ]

[ メッセージ編集済み 編集者: インギ 編集日時 2003-05-23 12:19 ]

スキルアップ/キャリアアップ(JOB@IT)