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: ¿Cómo puedo descargar un archivo de vídeo a una tarjeta SD?
  • Android: ¿Cómo url de la tienda en el archivo de recursos string.xml?
  • Java.io.IOException: fallo de handshake SSL: error en la biblioteca SSL, por lo general un error de protocolo
  • Codificación de URL en Android
  • Android webview loadDataWithBaseURL cómo cargar imágenes de los activos?
  • ¿Cómo establecer un hipervínculo en textview clicable? Android Java
  • Cómo almacenar datos desde un archivo XML a una base de datos SQLite en android
  • Establecer la imagen del url a la vista de la imagen
  • Android ¿Cuál es la mejor manera de almacenar URL? Miembros de datos estáticos o en String.xml?
  • Aplicación de Android: ¿Cómo leer obtener parámetros de un esquema de url personalizado?
  • Servicio de Android - URL de ping
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.