- - PR -
requestパラメータを、画面で指定したcharsetの文字で取得したい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-22 13:59
いつもお世話になります。
charset=Shift_JISで指定したWeb画面からのrequestを getParameterを使用して取得すると、強制的にUnicodeに 変換されています。 (getParameterの戻り値がStringなので当り前かもしれませんが) 機種依存文字チェックを行いたいのですが、これではSJISのコード でチェックできません。 @ → !)@になってしまっている。 request.getInputStream()では、特定のパラメータを取得出来ません し、このような画面からの入力チェック(機種依存文字など)を皆さんは どのように実装されているのでしょうか? (JavaScriptでは出来ればやりたくないです。) お忙しいところ、ご教示の程宜しくお願い致します。 _________________ | ||||
|
投稿日時: 2005-04-22 14:12
パラメータを取得する前に、
とやるとどうですか? | ||||
|
投稿日時: 2005-04-22 15:51
Edossonさん:
JavaのFillterのdoFilterメソッドで、セットしております。 ↓ request.setCharacterEncoding("Shift-JIS"); これは、requestの文字をShift-JISとして取得するという事と 認識してます。 JavaでgetParameterで取得後は、内部でUnicodeに変換されてしまいます。 パラメタの値をInputStream型で取りたいです。 (ファイルアップロードとかではなく、Formの普通のパラメータを InputStream型で・・・。画像とかでは無い) 技術的に無理なのでしょうか? _________________ | ||||
|
投稿日時: 2005-04-22 16:21
sekiさん:
フォームのmethodがPOSTであれば、ServletRequest#getInputStream()で 全てのパラメータが取得できるはずですが.... 具体的にどのようなパラメータが取得できないのでしょう?? | ||||
|
投稿日時: 2005-04-22 16:25
先ほどの回答は、はずしていたみたいですみません。
ところで、
が、よくわからないのですが、「InputStreamを通してデータを取得したい」と いう解釈で合ってますでしょうか。 あと、取得した文字列が化けているとのことですが、入力フォームのある Web画面のcharsetの設定に不具合があるのでは? 特に、JSPの場合は、metaタグの設定は効かないようです。 | ||||
|
投稿日時: 2005-04-22 16:27
まず、「Shift-JIS」ではなく「Shift_JIS」ではないかと思います。 さらに、「Windows-31J」での取り込みが本来やりたいことではないかと思いますが……。 「正しく取り込んだ機種依存文字」を「一般的な類似文字」に置き換えるような処理をしたことはあります。変換はUnicode→Unicodeで。 | ||||
|
投稿日時: 2005-04-22 16:33
エンコーディングをShift_JISではなく、Windows-31Jにしてみたらどうなりますか?
| ||||
|
投稿日時: 2005-04-22 17:57
書き込み頂いた皆さん:
多くのご返答ありがとうございます。 私の説明が不足していたようです。 【私のやりたいこと】 @ ファイルアップロード、及び画面入力より、機種依存文字をチェック したい。 (ファイル、及び画面入力はShift_JISである。DBの制約により Windows-31Jは使用しない) A ファイルアップロードでは、ファイルデータをServletInputStream で取得出来る。 InputStreamなので、byte配列に格納して、Shift_JISのコードで 機種依存文字のチェックを出来る。 (2バイト文字の2バイト目=nが、 if (0x40 <= n && n <= 0x9e)というように チェック) → この、機種依存文字チェッククラスを作成しました。 B Aで作成したチェッククラスを、画面入力チェックでも使用したい。 (共通クラスとして、同じチェッククラスを使用したい) C ところが、request.getParameterを使うと、戻り値が既にString なので(Unicode)Aのチェッククラスが使えない。 例えば、request.getParameter("user").getBytes("Shift_JIS") としてbyteにしても、その時点でUnicodeに変換されている。 (ヘキサで見てもそうなっている) > 永井和彦さんへ: → Shift_JISでも結果は同じでした。 Windows-31Jは、Unicodeで「〜‖−¢£¬\」とかが化ける為、 わざと使用したくないのです。 >Edossonさんへ: >Web画面のcharsetの設定に不具合があるのでは? → charset=Shift_JISを設定してます。 request.setCharacterEncoding("Shift_JIS") response.setContentType("Shift_JIS") in/outは全て"Shift_JIS"で統一しています。 >末記入さんへ: → ServletRequest#getInputStream()では、他のパラメタ取得で getParameterが使用できなくなります。 例えば、<form>タグにuserとpasswdがある場合、 1. userだけInputStreamで取り込みたい(入力チェックを行いたい) 2. passwdは入力チェックを行わないのでgetParameterで取り込みたい。 ※ この場合、2.が出来なくなります。(APIにも書いていました) >Edossonさんへ: → request.setCharacterEncoding("shift_jis");でも同じでした。 _________________ |
1|2|3
次のページへ»