- PR -

【struts】ActionFormの文字化け

投稿者投稿内容
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2006-09-13 13:25
>Edossonさん

丸数字はNEC選定外字だったような・・
ActionForm内ではrequestの処理って出来ないですよね
filterでrequestのエンコードを上書いたんですが、ダメでした

>nagiseさん

環境が抜けていました。すいませn
OS:WindowsXP Pro
ブラウザ:IE6
です

POSTデータを拾ってみたところ
@⇒%87@
焉ヒ%FB%FC
で送られているようです

この時点で既におかしいような
どう送られるのが正しいんでしょうか・・
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2006-09-13 21:27
@をWindows-31JでURLエンコードすると%87%40(ブラウザは%40=@で送る)
烽ヘ、%FB%FC
となりますのでPOSTデータは正しいと思います。
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 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
で試してみるのはいかがでしょうか。
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2006-09-14 13:31
>つばささん

教えていただいた方法で試したところ、あっさりと解決しました!!
ありがとうございます

filterで同じことをやっているはずなんですが、何故かききません・・
とりあえず教えていただいたほうほうでしのごうかと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-09-14 14:27
フィルタが動作していることは確認しましたか?
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2006-09-14 23:31
filterの実装はどのようになされていますか。
現象から推測するに、filterでShift_JISをエンコード
として指定しているのではないでしょうか?

また、
ActionServletを継承してprocess()をオーバライドする
方法もあるみたいです。
http://grape.sapid.org/tutorial/lec3.html
が参考になると思います。

が、根本的な原因がわからないのは気持ち悪いですね。
最大40
常連さん
会議室デビュー日: 2004/02/06
投稿数: 41
投稿日時: 2006-09-20 21:53
>ukさん、つばささん

返信が遅くなってしまい申し訳ないですm(_ _)m
Filterの動作はステップ実行できちんと働いていることを確認しました。
コードも"Windows-31J"に設定しているんですが、どこかで化けてしまうようです・・・
strutsのソースも追ってみたんですが、さすがにあきらめました

とりあえずActionFormのresetメソッドで解決できていますので、
これで対応しようと思います。

色々と教えていただき、ありがとうございました。
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2006-09-22 07:09
ActionFormのresetで
request.getCharacterEncoding()
した結果の文字列は何が設定されていますか?
Filterがきちんと動作されているなら、Windows-31Jです。
これは、確認されましたでしょうか。

どこかで化けると考えるよりは、デコードする文字列を
ただしく教えていないと考えるほうがよいかもです。
HttpServletRequest#setCharcterEncoding()
でセットしたエンコードにしたがって、リクエストパラメータ
がデコードされます。(getParameter時にこのエンコード文字列
を使用してデコードする)

ちなみに、使用されているアプリケーションサーバは
Tomcatですか?
それとも、WebSphereとかでしょうか。

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