- PR -

getQueryString()での文字化けについて

投稿者投稿内容
LEID
会議室デビュー日: 2002/09/25
投稿数: 18
投稿日時: 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??
が表示されるばかりです。

根本的なところで間違っている気がするので、
何処がおかしいのか教えていただけませんでしょうか?
茶葉
会議室デビュー日: 2002/12/28
投稿数: 10
投稿日時: 2003-01-10 19:44
>http://localhost/test/servlet/Test?Aaあ

URLエンコードをしていないからでしょう。
asip
ベテラン
会議室デビュー日: 2001/12/27
投稿数: 77
投稿日時: 2003-01-10 23:12
>http://localhost/test/servlet/Test?Aaあ

#IEやネスケ等での直接入力なら勝手にブラウザがURLエンコードするはず

http://localhost/test/servlet/Test?hogehoge=(AaあをURLエンコードした値)
でrequest.getParameter("hogehoge")とすればよいのでは?
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2003-01-11 15:31
> #IEやネスケ等での直接入力なら勝手にブラウザがURLエンコードするはず

これってバージョンにも依存してしまいますので、
当てにする場合には動作環境をはっきりと見極めましょう。>LEIDさん

勝手にエンコードしてくれるかどうかの一覧とかあると便利なんですけどねぇ。
LEID
会議室デビュー日: 2002/09/25
投稿数: 18
投稿日時: 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に変換するのでしょうか。
んー、、、もう少し調べてみます。
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2003-01-13 20:04
ServletAPI 2.3以降ならsetCharacterEncodingが簡単です。

request.setCharacterEncoding("Shift_JIS");
String value = request.getParameter("Aaあ");

毎回書くのも面倒なので、Filterに実装すると楽です。
LEID
会議室デビュー日: 2002/09/25
投稿数: 18
投稿日時: 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に実装ですか、、、少し調べて見ます。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-01-14 10:17
引用:

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に変換するのでしょうか。
んー、、、もう少し調べてみます。



こんにちわ。

URLDecorderというのがありますよ。

要は
渡す側では
java.net.URLEncorderでエンコードしてやって
受け側では
java.net.URLDecorderでデコードしてやるのです。

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