HttpURLConnection de Android y URL con caracteres especiales

Considere este código siguiente (que recupera la respuesta de una solicitud HTTP y la imprime). NOTA: Este código funciona en una aplicación Java estándar. Sólo experimento el problema que aparece a continuación al usar el código en una aplicación de Android.

public class RetrieveHTMLTest { public static void main(String [] args) { getListing(args[0); } public static void getListing(String stringURL) { HttpURLConnection conn = null; String html = ""; String line = null; BufferedReader reader = null; URL url = null; try { url = new URL(stringURL); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6000); conn.setReadTimeout(6000); conn.setRequestMethod("GET"); reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); conn.connect(); while ((line = reader.readLine()) != null) { html = html + line; } System.out.println(html); reader.close(); conn.disconnect(); } catch (Exception ex) { ex.printStackTrace(); } finally { } } } 

Si proporciono la URL: http: // somehost / somepath /

El código siguiente funciona correctamente. Pero, si cambio la URL a: http: // somehost / somepath [un comentario] / El código lanza una excepción de tiempo de espera debido a los caracteres "[" y "]".

Si cambio la URL a: http: // somehost / somepath% 20% 5Ba% 20comment% 5D / El código funciona bien. Una vez más, porque los caracteres "[" y "]" no están presentes.

Mi pregunta es, ¿cómo obtengo la URL:

Http: // somehost / somepath [un comentario] /

En el siguiente formato:

Http: // somehost / somepath% 20% 5Ba% 20comment% 5D /

Además, ¿debo continuar usando HttpURLConnection en Android ya que no puede aceptar una URL con caracteres especiales? Si el estándar para convertir siempre la URL antes de usar HttpURLConnection?

Utilice la clase URLEncoder :

 URLEncoder.encode(value, "utf-8"); 

Puede encontrar más detalles aquí .

Editar: Sólo debe utilizar este método para codificar los valores de los parámetros. NO codifique la URL completa. Por ejemplo, si usted tiene una url como: http://www.somesite.com?param1=value1&param2=value2 entonces sólo debe codificar value1 y value2 y luego formar la url usando versiones codificadas de estos valores.

 url = URLEncoder.encode(value, "utf-8"); url = url.replaceAll("\\+", "%20"); 

El "+" no puede ser revertido

  • Android: cita única escapada misteriosa en nombre de lugar codificado Uri
  • ¿Cómo extender la clase de URL para soportar otros protocolos en java (android)?
  • Android: no se muestra ImageView con UIL y TouchImageView
  • ¿Cómo usar el servicio Text-to-Speech de Google para los caracteres chinos en Android?
  • Análisis de la cadena JSON de la URL (RESTful webservice) mediante las bibliotecas GSON. Androide
  • Android: ¿Cómo usar la clase de gestor de descargas?
  • ¿Cómo abrir un sitio web cuando se hace clic en un botón en la aplicación de Android?
  • Servicio de Android - URL de ping
  • Android: Ir al URL de HTTP en el botón de clic
  • Edición específica de Url de Media Player de Android
  • ¿Detectar si url especificada es una imagen en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.