- - PR -
URLEncoder、URLDecoderの挙動について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-01 12:03
リファラーURLのクエリー文字列を見て、検索キーワードを取得するプログラムを作成しているのですが、リファラーサイトのcharsetがShift_JISの場合、URLDecoderでdecodeがうまくいきませんでした。
例.www.excite.co.jpで"東京大学"を検索 取得したURL:http://www.excite.co.jp/search.gw?lk=excite_jp&lang=jp&c=web&target=combined&search=%93%8C%8B%9E%91%E5%8Aw 検索キーワード:%93%8C%8B%9E%91%E5%8Aw 検索キーワードをDecodeした結果 URLDecoder.decode("%93%8C%8B%9E%91%E5%8Aw","Shift_JIS") = 東京大?w 上記のとおり正しくDecodeできません。 さらに調査した結果、そもそもURLEncoderでencodeした場合の結果も異なっていました。 URLEncoder.encode("東京大学","Shift_JIS") = %93%8C%8B%9E%91%E5%8A%77 なぜこのような違いが出てしまうのでしょうか? また、解決策をご存知でしたら教えていただけますか。 JDKのバージョンはJDK1.5.0_04です。 |
|
投稿日時: 2005-11-01 12:26
この問題かな?
http://dock.baykit.org/webut13?URLEncode _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2005-11-01 22:14
つばさです。
HTTPClientのクラスを使えば、解決可能かと思います。 理論については、 http://senrigan.ddo.jp/candid/urlencode.html を参照されてください。 |
|
投稿日時: 2005-11-02 23:30
つばさです。
すみません、HTTPClientのサンプルを提供しておりませんでした。 import org.apache.commons.httpclient.util.URIUtil; System.out.println(URIUtil.decode("%93%8C%8B%9E%91%E5%8Aw", "Windows-31J")); System.out.println(URIUtil.decode("%93%8C%8B%9E%91%E5%8A%77", "Windows-31J")); いずれも東京大学になります。 以上です。 |
|
投稿日時: 2005-11-03 16:55
つばさです。
HTTPClientでなくて、commons codecにエンコード、デコードのメソッドがありますね。 import org.apache.commons.codec.net.URLCodec; URLCodec codec = new URLCodec(); System.out.println(codec.decode("%93%8C%8B%9E%91%E5%8Aw", "Windows-31J")); System.out.println(codec.decode("%93%8C%8B%9E%91%E5%8A%77", "Windows-31J")); 以上です。 |
|
投稿日時: 2005-11-07 11:15
じゃんぬねっと様、つばさ様
返答ありがとうございました。 org.apache.commons.codec.net.URLCodec を使用することにより、無事デコードすることができました。 本当にありがとうございました。 |
1