- - PR -
【struts】ActionFormの文字化け
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-09-13 13:25
>Edossonさん
丸数字はNEC選定外字だったような・・ ActionForm内ではrequestの処理って出来ないですよね filterでrequestのエンコードを上書いたんですが、ダメでした >nagiseさん 環境が抜けていました。すいませn OS:WindowsXP Pro ブラウザ:IE6 です POSTデータを拾ってみたところ @⇒%87@ 焉ヒ%FB%FC で送られているようです この時点で既におかしいような どう送られるのが正しいんでしょうか・・ |
|
投稿日時: 2006-09-13 21:27
@をWindows-31JでURLエンコードすると%87%40(ブラウザは%40=@で送る)
烽ヘ、%FB%FC となりますのでPOSTデータは正しいと思います。 |
|
投稿日時: 2006-09-13 22:57
サーブレットフィルターを使う以外に
ActionFormの中のreset()をオーバーライドすればよいのでは。 ちょっとためしてみましたが、 public void reset(ActionMapping arg0, HttpServletRequest request) { try { request.setCharacterEncoding("Shift_JIS"); } catch (Exception ex) { ex.printStackTrace(); } } とすると、@は?@に文字化けします。 request.setCharcterEncoding("Windows-31J"); とすると、@は@になります。 しかし、Filterで化けるのはなんででしょうか? とりあえず、FilterをやめてActionForm#reset で試してみるのはいかがでしょうか。 |
|
投稿日時: 2006-09-14 13:31
>つばささん
教えていただいた方法で試したところ、あっさりと解決しました!! ありがとうございます filterで同じことをやっているはずなんですが、何故かききません・・ とりあえず教えていただいたほうほうでしのごうかと思います。 |
|
投稿日時: 2006-09-14 14:27
フィルタが動作していることは確認しましたか?
|
|
投稿日時: 2006-09-14 23:31
filterの実装はどのようになされていますか。
現象から推測するに、filterでShift_JISをエンコード として指定しているのではないでしょうか? また、 ActionServletを継承してprocess()をオーバライドする 方法もあるみたいです。 http://grape.sapid.org/tutorial/lec3.html が参考になると思います。 が、根本的な原因がわからないのは気持ち悪いですね。 |
|
投稿日時: 2006-09-20 21:53
>ukさん、つばささん
返信が遅くなってしまい申し訳ないですm(_ _)m Filterの動作はステップ実行できちんと働いていることを確認しました。 コードも"Windows-31J"に設定しているんですが、どこかで化けてしまうようです・・・ strutsのソースも追ってみたんですが、さすがにあきらめました とりあえずActionFormのresetメソッドで解決できていますので、 これで対応しようと思います。 色々と教えていただき、ありがとうございました。 |
|
投稿日時: 2006-09-22 07:09
ActionFormのresetで
request.getCharacterEncoding() した結果の文字列は何が設定されていますか? Filterがきちんと動作されているなら、Windows-31Jです。 これは、確認されましたでしょうか。 どこかで化けると考えるよりは、デコードする文字列を ただしく教えていないと考えるほうがよいかもです。 HttpServletRequest#setCharcterEncoding() でセットしたエンコードにしたがって、リクエストパラメータ がデコードされます。(getParameter時にこのエンコード文字列 を使用してデコードする) ちなみに、使用されているアプリケーションサーバは Tomcatですか? それとも、WebSphereとかでしょうか。 |