¿Cómo decodificar URL en Java?
En Java, quiero convertir esto:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
A esto:
https://mywebsite/docs/english/site/mybook.do&request_type
Esto es lo que tengo hasta ahora:
class StringUTF
{
public static void main(String[] args)
{
try{
String url =
"https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do" +
"%3Frequest_type%3D%26type%3Dprivate";
System.out.println(url+"Hello World!------->" +
new String(url.getBytes("UTF-8"),"ASCII"));
}
catch(Exception E){
}
}
}
Pero no funciona bien. ¿Cómo se llaman estos %3A
formatos %2F
y cómo los convierto?
Esto no tiene nada que ver con codificaciones de caracteres como UTF-8 o ASCII. La cadena que tienes allí está codificada en URL . Este tipo de codificación es completamente diferente a la codificación de caracteres.
Pruebe algo como esto:
try {
String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
// not going to happen - value came from JDK's own StandardCharsets
}
Java 10 agregó soporte directo Charset
a la API, lo que significa que no es necesario detectar UnsupportedEncodingException:
String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8);
Tenga en cuenta que una codificación de caracteres (como UTF-8 o ASCII) es lo que determina la asignación de caracteres a bytes sin formato. Para obtener una buena introducción a las codificaciones de caracteres, consulte este artículo .
La cadena que tienes está application/x-www-form-urlencoded
codificada.
Utilice URLDecoder para convertirlo a Java String.
URLDecoder.decode( url, "UTF-8" );
Esto ya se ha respondido antes (¡aunque esta pregunta fue la primera!):
"Deberías usar java.net.URI para hacer esto, ya que la clase URLDecoder decodifica x-www-form-urlencoded, lo cual es incorrecto (a pesar del nombre, es para datos de formulario)".
Como indica la documentación de la clase URL :
La forma recomendada de gestionar la codificación y decodificación de URL es utilizar URI y realizar conversiones entre estas dos clases utilizando toURI() y URI.toURL() .
Las clases URLEncoder y URLDecoder también se pueden usar, pero solo para la codificación de formularios HTML, que no es lo mismo que el esquema de codificación definido en RFC2396 .
Básicamente:
String url = "https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type";
System.out.println(new java.net.URI(url).getPath());
Te regalaré:
https://mywebsite/docs/english/site/mybook.do?request_type
yo uso apache común
String decodedUrl = new URLCodec().decode(url);
El juego de caracteres predeterminado esUTF-8
public String decodeString(String URL)
{
String urlString="";
try {
urlString = URLDecoder.decode(URL,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
}
return urlString;
}