2012-09-14 10 views
5

Ich bin ziemlich neu in Java und stieß auf dieses Problem. Ich habe versucht zu suchen, aber nie eine richtige Antwort bekommen.URISyntaxException - Umgang mit URLs mit%

Ich habe eine Zeichenfolge beispielsweise

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

Jetzt muss ich wie unten eine URL-Zeichenfolge mit diesem String name aufzubauen.

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

Ich habe versucht, die Räume durch% 20 ersetzt und jetzt erhalte ich die neue URL als

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

Wenn ich diese URL verwenden und Feuer es in Firefox funktioniert es ganz gut, aber bei der Verarbeitung in Java es wirft offenbar

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 

Dies ist der Code, werfen Fehler

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet(url); 
HttpResponse response = httpclient.execute(httpget); 

Antwort

5

Kodieren Sie auch das Prozentzeichen mit %25.

http://something.com/test/anything 10%-20% 04-03-07 würde mit http://something.com/test/anything%2010%25-20%25%2004-03-07 funktionieren.

Sie sollten zum Beispiel URLEncoder.encode dafür nutzen können - nur nicht vergessen, dass Sie den Pfad Teil urlencode brauchen, nichts davor, so etwas wie

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

Hinweis: URLEncoder Leerzeichen codiert zu + anstelle von , aber es sollte genauso gut funktionieren, beide sind in Ordnung.

+0

Dank, das perfekt funktioniert zu erstellen. Ich habe versucht, mir zu entziehen. Dachte nicht aus einer Ersatzperspektive. – Vish

-1

könnten Sie java.net.URI verwenden, um einen uri aus der Zeichenfolge

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);