- PR -

IE6にてのJSPの文字化けについて

投稿者投稿内容
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 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のほうは、涼しい顔して動いているんですが・・・。

お手数をおかけしますが、何かご存じの方いらっしゃいましたら、ご教示をお願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 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でデコードしてみてはどうでしょうか。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2004-06-25 09:56
uk様、ありがとうございます。
GETで送られる文字列は、charsetの指定とは無関係でしたか。

ところで、昨夜、投稿を拝見して、そのあと気が付いたのですが、
&で区切られた2番目のパラメータの取得に失敗もしていますので、
デコード以前に、パラメータの取得、または送付された文字列の解析
そのものに失敗しているということもあるでしょうか・・・。

こちらでも、試してみます。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-06-25 10:42
フォーム内でmethod="GET"と指定すると、IEが勝手にURLエンコードして送ると思いますが、<a>タグで単にリンクしただけだと、IEは何もしてくれないと思います。
なので、<a>タグに書くリンク自体をURLエンコードしておく必要があるのではないかと思います。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 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/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2004-06-25 10:56
URLEncoderでエンコードする場合UTF-8を使用することが推奨されています。
EdossonさんのサイトもUTF-8で統一されているならば
UTF-8を用いたほうがいいと思います。

取得するときはURLDecoderでUTF-8でデコードしてやれば
getBytes->new String で文字エンコードを変更する必要は無かったと思います。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 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/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 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 ]

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