Skip to content

3 URLEncoder y URLDecoder

URLEncoder y URLDecoder

Debemos tener en cuenta que los distintos sistemas operativos tienen distintas reglas a la hora de crear los nombres de los archivos, permitiendo en algunos casos caracteres que no son válidos en otros. Esto puede suponer un problema a la hora de trabajar con las URL, ya que, como hemos visto anteriormente, algunos caracteres no están permitidos.

Java proporciona la clase URLEncoder con su método estático encode(stringToEncode, encoding), y la clase URLDecoder con su método estático decode(stringToDecode, encoding), que realizan para nosotros la codificación y decodificación, respectivamente, retornando la cadena resultante del proceso. Ambos métodos reciben la cadena a procesar y el formato de codificación de caracteres en el que deben ser procesados, normalmente "UTF-8".

Ambos métodos lanzan la excepción UnsupportedEncodingException si no es posible, respectivamente, la codificación o descodificación.

String encoded = URLEncoder.encode(originalUrlString, StandardCharsets.UTF_8.toString());
String decoded = URLDecoder.decode(encodedUrlString, StandardCharsets.UTF_8.toString());

Otra solución consiste en crear un objeto URI usando su constructor URI(string), que realiza internamente el proceso de codificación. Si se trata de una url podemos obtener el objeto URL a partir del objeto URI mediante el método toURL():

URL url = new URI(txtWebUrl.getText().toString()).toURL();

El constructor de la clase URI puede lanzar la excepción URISyntaxException si la cadena recibida no tiene el formato de una URI válida. Por su parte el método toURL() puede lanzar la excepción MalformedURLException, ya que internamente llama al constructor de la clase URL.