- - PR -
IE6にてのJSPの文字化けについて
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-06-24 18:48
JSPで、ページ移動時に漢字パラメータを渡そうとしているのですが、文字化けに悩まされています。
環境は、Windows2000, Tomcat4.1です。ブラウザはIE6。 サイトは、UTF-8で記述されていまして、Mozilla1.7では問題ないんです。 移動元のリンクは、下記の通り。 <A href=target.jsp?base=管理情報&menu=登録>登録</A> <A href=target.jsp?base=管理情報&menu=遂行>遂行</A> 受ける側のJSPの記述は、下記の通りです。 String base = new String(request.getParameter("base").getBytes("iso-8859-1"), "utf-8"); String menu = new String(request.getParameter("menu").getBytes("iso-8859-1"), "utf-8"); これで、管理の「理」、遂行の「行」、完了の「了」などの文字が化けてしまいます。 試しに「了解」を送ってみると、2文字とも化けてしまいました。 menuがNullになってしまう現象が生じていまして、 一文字多いか少ないかという状況になっているようなので、 shift_jisのメタ文字の問題かとも考えたのですが、上記の文字は該当しないようですし・・・。 文字化け対策に追われたのは初めてではないし、 サイトでもさんざん探したのですが、上記のような文字化けに関する情報は 見つけられませんでした。 試しに、euc-jpにしてみましたが、これでもだめなようです。化け方は違うようですが。 いや、Mozilla1.7のほうは、涼しい顔して動いているんですが・・・。 お手数をおかけしますが、何かご存じの方いらっしゃいましたら、ご教示をお願い致します。 |
|
投稿日時: 2004-06-24 19:09
POSTではなくてGETなので、コンテンツの文字エンコーディングとは無関係に送られますね。
IEだと多分シフトJISのままURLエンコーディングして送ってると思います。 String base = new String(request.getParameter("base").getBytes("iso-8859-1"), "utf-8"); utf-8ではなく、JISAutoDetectでデコードしてみてはどうでしょうか。 |
|
投稿日時: 2004-06-25 09:56
uk様、ありがとうございます。
GETで送られる文字列は、charsetの指定とは無関係でしたか。 ところで、昨夜、投稿を拝見して、そのあと気が付いたのですが、 &で区切られた2番目のパラメータの取得に失敗もしていますので、 デコード以前に、パラメータの取得、または送付された文字列の解析 そのものに失敗しているということもあるでしょうか・・・。 こちらでも、試してみます。 |
|
投稿日時: 2004-06-25 10:42
フォーム内でmethod="GET"と指定すると、IEが勝手にURLエンコードして送ると思いますが、<a>タグで単にリンクしただけだと、IEは何もしてくれないと思います。
なので、<a>タグに書くリンク自体をURLエンコードしておく必要があるのではないかと思います。 |
|
投稿日時: 2004-06-25 10:46
以下のようにあらかじめURLEncoderでエンコードして送信する方法はいかがでしょうか?
<A href=target.jsp?base=<%=URLEncoder.encode("管理情報")%>&menu=<%=URLEncoder.encode("登録")%>>登録</A> http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/URLEncoder.html # かぶってしまいました。すみません。 [ メッセージ編集済み 編集者: taro 編集日時 2004-06-25 10:52 ] |
|
投稿日時: 2004-06-25 10:56
URLEncoderでエンコードする場合UTF-8を使用することが推奨されています。
EdossonさんのサイトもUTF-8で統一されているならば UTF-8を用いたほうがいいと思います。 取得するときはURLDecoderでUTF-8でデコードしてやれば getBytes->new String で文字エンコードを変更する必要は無かったと思います。 |
|
投稿日時: 2004-06-25 12:08
皆さんありがとうございました。
うまくいきましたので、ご報告にあがりました。 移動元のコードは、taro様の投稿を丸ごと拝借致しました。m(_ _)m ただ、受ける側では、デコードだけでは文字が化けてしまい、 Shift_JISへのコード変換が必要でした。 >いっきゅう様 見落としでしたらすみません。デコード時に、文字コードを指定する方法が ありましたら、ご教示頂けますでしょうか。 うまくいったコードは、下記の通りです。 menu = URLDecoder.decode( request.getParameter("menu") ); menu = new String( menu.getBytes("iso-8859-1"), "shift_jis"); なぜShift_JISなのかは不明です。ロケールとか、関係しているんでしょうか。 もうちょっと調べてみるつもりです。 URLエンコードをやらなかったわけではないのですが<言い訳(- -; 受ける側でデコードしなかったりしてうまくいってませんでした。(Mozillaではそれで通ったような・・・) ただ、こういうことを、アプリケーションの実装に依存するのはよくないと思いまして。 (そもそもIEで動かなかったし) 本当に、ありがとうございました。 [ メッセージ編集済み 編集者: Edosson 編集日時 2004-06-25 12:15 ] |
|
投稿日時: 2004-06-25 12:44
>>いっきゅう様
> 見落としでしたらすみません。デコード時に、文字コードを指定する方法が > ありましたら、ご教示頂けますでしょうか。 失礼しました。 文字コードが指定できるのはJ2SDK1.4からのようです。 1.4をご使用ならば http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/URLEncoder.html#encode(java.lang.String, java.lang.String) を確認して下さい。 又、1.3以下をお使いで文字コード指定のURL変換をしたいならば 確かCommons HttpClient(2.0?)に含まれるライブラリをお使いになればと思います。 [ メッセージ編集済み 編集者: いっきゅう 編集日時 2004-06-25 12:48 ] |
