[Wicket-ja-user 72] Re: AjaxButtonでsubmitしたFormのencodeについて

Zurück zum Archiv-Index

Toshihiro Shimizu shimi****@gmail*****
2008年 4月 15日 (火) 18:25:23 JST


清水(meso)です。

なるほど、ブラウザ判定でShift_JISなんですね。それはかなり茨の道ですね。
おっしゃるとおり、今はUTF-8で作っとくのがベストだと思います。
とはいえ、Shift_JISでもなんとかならんかなと、いじってみました。

AjaxButtonのonSubmitメソッドを

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form form) {
                try {
                    byte[] bytes = textField.getModelObjectAsString().getBytes(
                            "Shift_JIS");
                    result.setModelObject(new String(bytes, "UTF-8"));
                    target.addComponent(result);
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

こんな感じにしたら、「ああああ」と入力すれば「ああああ」と文字化けせずに表示できました。
が、「あいうえおかきくけこ」を入力したら「あい????おかきくけこ」と表示されました・・・。
でもこれってWicketのせいじゃないだろうから、なんとかしようがありそうな気も。

08/04/15 に 尾崎智仁<helme****@gmail*****> さんは書きました:
> 尾崎です。
>
> 言葉足らずですみません・・・。
>
> > HTMLをShift_JISで作成し、HTMLのHEAD内で
> > <meta http-equiv="content-type" content="text/html; charset=sjis"/>
> > と指定し、Applicationクラスのinitメソッド内で
> >
> getRequestCycleSettings().setResponseRequestEncoding("Shift_JIS");
> > と指定したところ、確かに文字化けすることを確認しました。
> 上記のとおりです。
>
> もう少し詳細に書くと、
> テンプレート・ファイルを文字コードShift_JISで、XHTMLで作成しました。
>  XML宣言にもencoding="Shift_JIS"を指定しています。
> さらに、
> getRequestCycleSettings().setResponseRequestEncoding("Shift_JIS");と指定しています。
>
> この状態だと、ブラウザに出力されるHTMLはShift_JISとなります。
> (ブラウザ側もShift_JISで解釈しています。)
>
> で、submitを行うと、フォームのデータをutf-8でencodeした
> POSTデータが、サーバに送信されます。
>
>  wicket-ajax.jsの370行目で行われているencodeURIComponent(text);で、
> POSTデータはutf-8にされているようです。
> (encodeURIComponent でエンコードされたデータは、
> クライアントのキャラクタセットにかかわらず、utf-8 になります)
>
> しかし、サーバ側ではgetRequestCycleSettings().setResponseRequestEncoding("Shift_JIS");と指定しているため、
> Wicket側でHttpServletRequest.setCharacterEncoding("Shift_JIS")を設定し、
> 結果POSTデータをShift_JISとしてエンコードしようとして文字化けとなっていると思われます。
>
> これって、Wicketのバグなんでしょうか?
>
> とりあえず、getRequestCycleSettings().setResponseRequestEncoding("utf-8");で
> 対応しましたが、ちょっと気持ち悪い感じです。
> まぁ、いまは全部utf-8で作っとけってことなんですかね。
>
> 08/04/15 に Toshihiro Shimizu <shimi****@gmail*****> さんは書きました:
> > 清水(meso)です。
> >
> > HTMLをShift_JISで作成し、HTMLのHEAD内で
> > <meta http-equiv="content-type" content="text/html; charset=sjis"/>
> > と指定し、Applicationクラスのinitメソッド内で
> >
> getRequestCycleSettings().setResponseRequestEncoding("Shift_JIS");
> > と指定したところ、確かに文字化けすることを確認しました。
> >
> > しかし、そのページのソースをブラウザから表示してみると、
> > <meta http-equiv="content-type" content="text/html; charset=sjis"/>
> > は削除されており、ページのエンコードもUTF-8だと判定されていました。
> >
> > なので、
> >
> getRequestCycleSettings().setResponseRequestEncoding("Shift_JIS");
> > を
> >
> getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
> > にすると、文字化けが解消されました。
> >
> >
> 「HTMLをShit_JISに」するというのが、ブラウザでのエンコード判定もShit_JISになっていることを意味しているのか分からなかったので、もしかしたら的外れな返答かもしれませんが、よかったら試してみてください。
> >
> > 08/04/14 に 尾崎智仁<ozaki****@yuroy*****> さんは書きました:
> >
> > > はじめまして。尾崎と申します。
> > >
> > > HTMLをShift_JISにして、AjaxButtonでsubmitすると、
> > > Form内のテキストフィールド内の文字を問答無用でutf-8で
> > > encodeして送信しているようです。
> > >
> > >
> サーバ側では、getRequestCycleSettings().setResponseRequestEncoding("Shift_JIS");と
> > > 指定しているため、Shift_JISと解釈して文字化けが発生します。
> > >
> > > どうも、wicket-ajax.jsの370行目で
> > > return encodeURIComponent(text);
> > > としている部分が問題のようです。
> > >
> > > このような現象の回避方法を、どなたかご存じないでしょうか?
> > > (そもそも全部utf-8で作ればいいんですけど・・・。)
> > >
> > >
> >
> > > _______________________________________________
> > >  Wicket-ja-user mailing list
> > >  Wicke****@lists*****
> > >
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
> > >
> > >
> >
> > _______________________________________________
> > Wicket-ja-user mailing list
> > Wicke****@lists*****
> >
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
> >
>
>
> _______________________________________________
>  Wicket-ja-user mailing list
>  Wicke****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
>
>




Wicket-ja-user メーリングリストの案内
Zurück zum Archiv-Index