¿Cómo decodificar URL en Java?

Resuelto crackerplace asked hace 13 años • 11 respuestas

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 %3Aformatos %2Fy cómo los convierto?

crackerplace avatar May 26 '11 19:05 crackerplace
Aceptado

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 Charseta 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 .

Jesper avatar May 26 '2011 12:05 Jesper

La cadena que tienes está application/x-www-form-urlencodedcodificada.

Utilice URLDecoder para convertirlo a Java String.

URLDecoder.decode( url, "UTF-8" );
Alexander Pogrebnyak avatar May 26 '2011 12:05 Alexander Pogrebnyak

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
Nick Grealy avatar May 09 '2013 03:05 Nick Grealy

yo uso apache común

String decodedUrl = new URLCodec().decode(url);

El juego de caracteres predeterminado esUTF-8

Sorter avatar Aug 10 '2014 12:08 Sorter
public String decodeString(String URL)
    {

    String urlString="";
    try {
        urlString = URLDecoder.decode(URL,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block

        }

        return urlString;

    }
Ronak Poriya avatar Jun 16 '2015 07:06 Ronak Poriya