- - PR -
getQueryString()での文字化けについて
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-01-10 16:13
お疲れ様です、LEIDです。
前回の投稿から日が浅いのですが、文字化けの原因が分からなく投稿させていただきます。 OSはWindows2000 サーバはApache Tomcat1.4です。 JDKのバージョンも1.4を使用しています。 現在 URL以下に http://localhost/test/servlet/Test?Aaあ などとして値を渡しているのですが、コレをサーブレットの request.getQueryString() で取得すると、日本語が文字化けしてしまいます。 受け取った値をrequest.getQueryString()で表示すると、 Aaツ? と表示されます。 値を調べようと以下のコードで中身を見て見ると //受け取った文字列のチェック。 char[] buf = str.toCharArray(); for (int i = 0; i < buf.length; i++) { System.out.print(Integer.toString(buf[i], 16) + " "); } 以下の内容が表示されます。 41 61 ff82 ffa0 new String(str.getBytes("shift_jis"), "ISO8859_1"); new String(str.getBytes("8859_1"),"SJIS"); などと言った方法で色々試して見たのですが結果は Aa?? が表示されるばかりです。 根本的なところで間違っている気がするので、 何処がおかしいのか教えていただけませんでしょうか? | ||||
|
投稿日時: 2003-01-10 19:44
>http://localhost/test/servlet/Test?Aaあ
URLエンコードをしていないからでしょう。 | ||||
|
投稿日時: 2003-01-10 23:12
>http://localhost/test/servlet/Test?Aaあ
#IEやネスケ等での直接入力なら勝手にブラウザがURLエンコードするはず http://localhost/test/servlet/Test?hogehoge=(AaあをURLエンコードした値) でrequest.getParameter("hogehoge")とすればよいのでは? | ||||
|
投稿日時: 2003-01-11 15:31
> #IEやネスケ等での直接入力なら勝手にブラウザがURLエンコードするはず
これってバージョンにも依存してしまいますので、 当てにする場合には動作環境をはっきりと見極めましょう。>LEIDさん 勝手にエンコードしてくれるかどうかの一覧とかあると便利なんですけどねぇ。 | ||||
|
投稿日時: 2003-01-13 17:52
お疲れ様です。
URLエンコーディングですか、、、ふむ。 >asip さん >http://localhost/test/servlet/Test?hogehoge=(AaあをURLエンコードした値) >でrequest.getParameter("hogehoge")とすればよいのでは? 了解しました。 イコールで送るとgetParameterが使えるのですか、、、ヒトツ勉強になりました。 >まりり さん IE6.0で動作検証はしてました。 ブラウザのエンコードはバージョンに依存するようなので検証してみます。 URLのエンコーディングは java.net.URLEncoder を使えばいいんでしょうか。 コレでエンコードすると%00%11といった感じになるんですが、コレをどうやって 日本語の文字列とかに変換したらイイのでしょうか。 バイトか何かで読み込みなおしてそれをStringに変換するのでしょうか。 んー、、、もう少し調べてみます。 | ||||
|
投稿日時: 2003-01-13 20:04
ServletAPI 2.3以降ならsetCharacterEncodingが簡単です。
request.setCharacterEncoding("Shift_JIS"); String value = request.getParameter("Aaあ"); 毎回書くのも面倒なので、Filterに実装すると楽です。 | ||||
|
投稿日時: 2003-01-14 09:53
>みやも さん
参照URLに http://xxx.xxx.xxx/TestServlet?filename=Aaあ とし、以下のようにすることで無事に文字列を受け取ることが出来ました。 request.setCharacterEncoding("Shift_JIS"); String value = request.getParameter("filename"); 動作確認はIE6.0とIE5.5でやったので他のバージョンでも動作確認をして見たいと 思います。 Filterに実装ですか、、、少し調べて見ます。 | ||||
|
投稿日時: 2003-01-14 10:17
こんにちわ。 URLDecorderというのがありますよ。 要は 渡す側では java.net.URLEncorderでエンコードしてやって 受け側では java.net.URLDecorderでデコードしてやるのです。 | ||||
