2010-09-17 23 views
14

estoy usando la vista de cuadrícula para la visualización de la imagen utilizando el análisis de XML, tengo alguna excepción como java.lang.IllegalArgumentException: Illegal character in path at index 80: http://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg, la forma de resolver este problema?, Quiero mostrar todo tipo de URL, alguien sabe por favor, dar código de ejemplo para mí ..cómo codificar en url en android?

Gracias Todos

+0

una URL con un espacio en blanco en lugar de 20% es una URL ilegal. Por lo tanto, necesita un analizador para las URL rotas (a menos que pueda cambiarlas manualmente antes de analizarlas). – LatinSuD

+1

Posible duplicado de [codificación Url en Android] (http://stackoverflow.com/questions/3286067/url-encoding-in-android) – blahdiblah

Respuesta

29

La codificación URL se realiza de la misma manera en Android que en Java SE;

try { 
    String url = "http://www.example.com/?id=123&art=abc"; 
    String encodedurl = URLEncoder.encode(url,"UTF-8"); 
    Log.d("TEST", encodedurl); 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} 
+0

@http: //www.theblacksheeponline.com/party_img/thumbspps/12390867930_15951_186997180114_709920114_4296270_6115611_n [1 ] .jpg ¿Cómo puedo codificar este tipo de URL? Por favor, proporcione un código de muestra para mí ... – sivaraj

+36

Ese ejemplo muestra la URL: http% 3A% 2F% 2Fwww.example.com% 2F% 3Fid% 3D123% 26art% 3Dabc. Esa no es una URL válida en absoluto. El método URLEncoder.encode es para codificar valores de cadena de consulta en lugar de URL completas. Cita de documentos: 'Esta clase contiene métodos estáticos para convertir una cadena a la aplicación/x-www-form-urlencoded formato MIME' –

+4

Esa no es una codificación válida. Mire la respuesta aquí: http://stackoverflow.com/questions/3286067/url-encoding-in-android –

5

Como Ben dice en su comentario, usted no debería usar URLEncoder.encode a URLs completas, ya que va a cambiar la semántica de la URL por el siguiente ejemplo de los W3C:

Los URIs http://www.w3.org/albert/bertram/marie-claude y http://www.w3.org/albert/bertram%2Fmarie-claude no son idénticos, al igual que en el segundo caso la barra codificada no tiene importancia jerárquica.

su lugar, debe codificar partes componentes de una URL de forma independiente por lo siguiente de RFC 3986 Sección 2,4

En circunstancias normales, la única momento en octetos dentro de un URI son ciento codificados es durante el proceso de producir el URI a partir de sus componentes . Esto es cuando una implementación de determina cuáles de los caracteres reservados se van a utilizar como delimitadores de subcomponentes y que pueden usarse de forma segura como datos. Una vez producido , un URI siempre está en su forma con codificación porcentual.

Así que, en resumen, para su caso, debería codificar/escapar de su nombre de archivo y luego ensamblar la URL.

-1

Recientemente escribí un codificador URI rápido para este propósito. Incluso maneja caracteres Unicode. http://www.dmurph.com/2011/01/java-uri-encoder/

+3

¡Qué dulce pérdida de tiempo! ;) Android también tiene una clase Uri. –

1

URLEncoder sólo debe utilizarse para codificar las consultas, utilice java.net.URI clase en lugar:

 
URI uri = new URI(
    "http", 
    "www.theblacksheeponline.com", 
    "/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg", 
    null); 
String request = uri.toASCIIString(); 
11

También se puede utilizar este

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; 
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS); 

que es el método más sencillo

+1

Gran solución. ¿Cómo llegaste a la lista 'ALLOWED_URI_CHARS'? – user1032613

+0

También hay una sobrecarga que no toma 'ALLOWED_URI_CHARS' – lionello

+0

funciona: D gracias – A7madev

3

Usted don 't codificar la URL completa, solo partes de ella que provienen de "fuentes poco confiables" como.

String query = URLEncoder.encode("Hare Krishna ", "utf-8"); 
String url = "http://stackoverflow.com/search?q=" + query; 
0

puede utilizar a continuación el método

public String parseURL(String url, Map<String, String> params) 
{ 
    Builder builder = Uri.parse(url).buildUpon(); 
    for (String key : params.keySet()) 
    { 
     builder.appendQueryParameter(key, params.get(key)); 
    } 
    return builder.build().toString(); 
} 
Cuestiones relacionadas