2012-09-14 5 views
5

Sono abbastanza nuovo in Java e ho trovato questo problema. Ho provato a cercare ma non ho mai avuto una risposta corretta.URISyntaxException - Come gestire gli URL con%

Ho una stringa per esempio

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

Ora ho bisogno di costruire una stringa URL con questo nome String come qui di seguito.

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

Ho provato a sostituire gli spazi con% 20 e ora sto ottenendo il nuovo URL,

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

Quando uso questo URL e sparo in Firefox funziona bene ma durante l'elaborazione in Java è apparentemente gettando

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 

Questo è il codice di errore gettando

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

risposta

5

Codificare anche il segno di percentuale con %25.

http://something.com/test/anything 10%-20% 04-03-07 funzionerebbe con http://something.com/test/anything%2010%25-20%25%2004-03-07.

Si dovrebbe essere in grado di utilizzare, ad esempio URLEncoder.encode per questo - basta ricordare, che è necessario UrlEncode parte percorso, niente prima, in modo da qualcosa come

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

Nota: URLEncoder codifica gli spazi per + invece di %20, ma dovrebbe funzionare altrettanto bene, entrambi sono ok.

+0

Grazie che funziona perfettamente. Stavo cercando di evadere. Non ha pensato da una prospettiva di sostituzione. – Vish

-1

Si potrebbe utilizzare java.net.URI per creare un URI dalla stringa

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