urldecoder - sanitize url java
Decodificación de URL en Java 6 (5)
Como se menciona en la documentación , la decode(String)
está en desuso porque siempre utiliza la codificación predeterminada de la plataforma, que a menudo es incorrecta.
Utilice la versión de dos argumentos en su lugar . Deberá especificar la codificación utilizada en las partes escapadas.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo hacer decodificación de URL en Java? 9 respuestas
Veo que java.net.URLDecoder.decode(String)
está en desuso en 6.
Tengo la siguiente cadena:
String url ="http://172.20.4.60/jsfweb/cat/%D7%9C%D7%97%D7%9E%D7%99%D7%9D_%D7%A8%D7%92%D7%99%D7%9C%D7%99%D7%9"
¿Cómo debo decodificarlo en Java 6?
Como se señaló en los carteles anteriores, debe usar la clase java.net.URI para hacerlo:
System.out.println(String.format("Decoded URI: ''%s''", new URI(url).getPath()));
Lo que quiero señalar adicionalmente es que si tiene un fragmento de ruta de un URI y desea decodificarlo por separado, el mismo enfoque con el constructor de un solo argumento funciona, pero si intenta usar el constructor de cuatro argumentos , no lo hace :
String fileName = "Map%20of%20All%20projects.pdf";
URI uri = new URI(null, null, fileName, null);
System.out.println(String.format("Not decoded URI *WTF?!?*: ''%s''", uri.getPath()));
Esto se probó en Oracle JDK 7. El hecho de que esto no funcione es contraintuitivo, es contrario a JavaDocs y probablemente debería considerarse un error.
Podría hacer tropezar a las personas que están tratando de utilizar un enfoque simétrico para la codificación. Como se señala, por ejemplo, en esta publicación: " cómo codificar la URL para evitar caracteres especiales en java ", para codificar la URI, es una buena idea construir una URI pasando diferentes partes de la URI por separado ya que diferentes reglas de codificación se aplican a diferentes partes:
String fileName2 = "Map of All projects.pdf";
URI uri2 = new URI(null, null, fileName2, null);
System.out.println(String.format("Encoded URI: ''%s''", uri2.toASCIIString()));
Debería usar java.net.URI para hacer esto, ya que la clase URLDecoder realiza decodificación x-www-form-urlencoded que es incorrecta (a pesar del nombre, es para datos de formulario).
Solo el método de decode(String)
está en desuso. Debe usar el método de decode(String, String)
para establecer explícitamente una codificación de caracteres para la decodificación.
Ahora necesitas especificar la codificación de caracteres de tu cadena. Basado en la información en la página de URLDecoder
:
Nota: La Recomendación del Consorcio World Wide Web establece que se debe utilizar UTF-8. No hacerlo puede introducir incompatibilidades.
Lo siguiente debería funcionar para usted:
java.net.URLDecoder.decode(url, "UTF-8");
Por favor, vea la respuesta de Draemon a continuación.