2011-05-18 14 views
25

Tengo un archivo URL XML en el que hay espacios en blanco Quiero reemplazar espacios en blanco con% 20 .. ¿cómo hacer esto ????cómo insertar% 20 en lugar de espacio en android

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 

/** Send URL to parse XML Tags */ 
URL sourceUrl = new URL(
       "http://www.arteonline.mobi/iphone/output.php?gallery=MALBA%20-%20MUSEO%20DE%20ARTE%20LATINOAMERICANO%20DE%20BUENOS%20AIRES"); 

XMLHandlerartistspace myXMLHandler = new XMLHandlerartistspace(); 
xr.setContentHandler(myXMLHandler); 
xr.parse(new InputSource(sourceUrl.openStream())); 
+1

'URLEncoder.encode (value," UTF-8 ")' es la solución. –

Respuesta

48

Prueba esto:

String temp = http://www.arteonline.mobi/iphone/output.php?gallery=MALBA%20-%20MUSEO%20DE%20ARTE%20LATINOAMERICANO%20DE%20BUENOS%20AIRES 

temp = temp.replaceAll(" ", "%20"); 
URL sourceUrl = new URL(temp); 
+0

perfecto, fácil y de trabajo, muchas gracias :) – cV2

+5

Creo que este es el enfoque equivocado. La URL (excluyendo la parte del anfitrión) debe ser URL-encoded (usando 'URLEncoder.encode'). Después de hacer eso, puede reemplazar los caracteres '+' con '% 20'. Si no usa 'URLEncoder.encode', existe el riesgo de que otros caracteres especiales en la URL puedan causar problemas. (Tenga en cuenta que '+' para representar un carácter de espacio es perfectamente válido en una URL, es posible que ni siquiera necesite '% 20'.) –

+0

+1 Gracias por la solución. ¡Funcionó a las mil maravillas! Salvaste a mi hombre del día;) Muchas gracias otra vez;) – Sajmon

31

Cuando construye su URL, debe usar URLEncoder para codificar los parámetros.

StringBuilder query = new StringBuilder(); 
query.append("gallery="); 
query.append(URLEncoder.encode(value, "UTF-8")); 

Si ya tiene toda la URL en una cadena o una java.net.URL, se podía agarrar la parte de consulta y reconstruir mientras URLEncoding cada valor de parámetro.

+1

Esta es la forma correcta. Si está utilizando una expresión regular usted mismo o reemplaza todo, entonces lo está haciendo mal. –

+0

Pero asegúrese de no codificar en URL la parte del host de la url y los caracteres '/' dentro de la url. intente una subcadena de la url completa o hágalo en el proceso de compilación como sugiere sudocode con un generador de cadenas. – DArkO

+0

gracias por su buen concepto – SRam

2
String s = "my string"; 
s=s.replaceAll(" ", "%20"); 
3

supongo que desea reemplazar todos los espacios, no sólo blancos.

la forma más sencilla es utilizar

"url_with_spaces".replaceAll(" ", "%20); 

Sin embargo debe tener en cuenta también otros personajes en la url. Ver Recommended method for escaping HTML in Java

+1

qué ocurre si desea codificar el azul o los espacios rojos en la url? –

5

sólo una adición a la respuesta de sudocode:

uso android.net.Uri.encode en lugar de URLEncoder.encode para evitar los "espacios consiguiendo convertidos en +" problema. A continuación, a deshacerse de la String.replaceAll() y su más elegante :)

StringBuilder query = new StringBuilder(); 
query.append("gallery="); 
query.append(android.net.Uri.encode(value, "UTF-8")); 
+1

El uso correcto es android.net.Uri.encode (value, ": /"), donde el segundo argumento es una lista de caracteres que no deben codificarse – Softec

+0

Este debería ser el más votado y seleccionado. +1 –

1

Trate de usar URIUtil.encodePath método de la API org.apache.commons.httpclient.util.URIUtil.

Esto debería hacer el truco para usted.

1

Voy a agregar una sugerencia here. Puede hacer esto, lo que evita tener que obtener bibliotecas externas.

Cuestiones relacionadas