2012-09-14 8 views
5
でURLを処理する方法

私はかなりJavaに新しいですし、この問題を遭遇しました。私は検索しようとしましたが、正解を得られませんでした。URISyntaxException - %

私は

String name = anything 10%-20% 04-03-07 

例えば、文字列を持っている今、私は以下のように、この文字列名を持つURL文字列を構築する必要があります。

http://something.com/test/anything 10%-20% 04-03-07 

私は20%で、スペースを交換しようと、私はこのURLを使用して、それがうまく動作しますが、Firefoxでそれを発射すると、今私は

http://something.com/test/anything%2010%-20%%2004-03-07 

として新しいURLを取得していながら、Javaで処理それは明らかに誤り

コードが投げている
Exception in thread "main" java.lang.IllegalArgumentException 
at java.net.URI.create(Unknown Source) 
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69) 
Caused by: java.net.URISyntaxException: Malformed escape pair at index 39 : 
at java.net.URI$Parser.fail(Unknown Source) 
at java.net.URI$Parser.scanEscape(Unknown Source) 
at java.net.URI$Parser.scan(Unknown Source) 
at java.net.URI$Parser.checkChars(Unknown Source) 
at java.net.URI$Parser.parseHierarchical(Unknown Source) 
at java.net.URI$Parser.parse(Unknown Source) 
at java.net.URI.<init>(Unknown Source) 
... 6 more 

この

を投げています0

答えて

5

また、パーセント記号%25でエンコードします。

http://something.com/test/anything 10%-20% 04-03-07http://something.com/test/anything%2010%25-20%25%2004-03-07と連動します。

あなたはこのために例URLEncoder.encodeのために使用することができるはず - ちょうどあなたがパスの一部ではなく、その前に何かをURLENCODEする必要があることを、覚えているので、何か注意

String encodedUrl = 
    String.format("http://something.com/%s/%s", 
     URLEncoder.encode("test", "UTF-8"), 
     URLEncoder.encode("anything 10%-20% 04-03-07", "UTF-8") 
    ); 

のように:のURLEncoderは +にスペースをエンコードします %20の代わりに、同じようにうまくいくはずです。両方ともOKです。

+0

おかげでURIを作成するためにjava.net.URIを使用することができます。私はそれをエスケープしようとしていた。 Didntは交換の観点から考える。 – Vish

-1

あなたの文字列から完璧に動作

String url = "http://something.com/test/anything 10%-20% 04-03-07" 

URI uri = new URI(
    url, 
    null); 
String request = uri.toASCIIString(); 

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet(request); 
HttpResponse response = httpclient.execute(httpget); 
関連する問題