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 > >