2012-09-14 8 views
5

Soy bastante nuevo en Java y encontré este problema. Intenté buscar pero nunca obtuve una respuesta correcta.URISyntaxException - Cómo tratar con las URL con%

que tienen una cadena, por ejemplo

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

Ahora necesito para construir una cadena de URL con el nombre de cuerda, como a continuación.

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

intenté sustituir los espacios por% 20 y ahora estoy recibiendo la nueva URL como

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

Cuando utilizo esta url y el fuego que en Firefox simplemente funciona bien, pero mientras que el procesamiento en Java aparentemente está lanzando

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 

Esto es tirar el código de error

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

Respuesta

5

Codifique también el signo de porcentaje con %25.

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

Usted debe ser capaz de utilizar por ejemplo URLEncoder.encode para esto - sólo recuerda, que es necesario urlencode la parte de la ruta, no nada antes de eso, así que algo como

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 espacios para + en lugar de %20, pero debería funcionar igual de bien, ambos están bien.

+0

Gracias que funciona perfectamente. Intentaba escapar de eso. No pensé desde una perspectiva de reemplazo. – Vish

-1

Usted podría utilizar java.net.URI para crear un URI de la cadena de

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