397 Stimmen

Wie dekodiert man URLs in Java?

In Java möchte ich dies umwandeln:

https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type

Zu diesem:

https://mywebsite/docs/english/site/mybook.do&request_type

Dies ist mein bisheriger Stand:

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){
        }
    }
}

Aber es funktioniert nicht richtig. Was sind diese %3A y %2F Formate genannt und wie kann ich sie umwandeln?

752voto

Jesper Punkte 193903

Dies hat nichts mit Zeichenkodierungen wie UTF-8 oder ASCII zu tun. Die Zeichenfolge, die Sie dort haben, ist URL verschlüsselt . Diese Art der Kodierung ist etwas völlig anderes als die Zeichenkodierung.

Versuchen Sie so etwas:

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 bietet direkte Unterstützung für Charset zur API, d.h. es ist nicht notwendig, UnsupportedEncodingException abzufangen:

String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8);

Beachten Sie, dass eine Zeichenkodierung (z. B. UTF-8 oder ASCII) bestimmt die Zuordnung von Zeichen zu Rohbytes. Eine gute Einführung in Zeichenkodierungen finden Sie unter dieser Artikel .

74voto

Alexander Pogrebnyak Punkte 43705

Die Zeichenkette, die Sie haben, ist in application/x-www-form-urlencoded Kodierung.

Utilice URLDecoder um sie in Java String zu konvertieren.

URLDecoder.decode( url, "UTF-8" );

56voto

Nick Grealy Punkte 21004

Diese Frage wurde bereits beantwortet vor (obwohl diese Frage die erste war!):

"Sie sollten java.net.URI verwenden, um dies zu tun, da die Klasse URLDecoder x-www-form-urlencoded decodiert, was falsch ist (trotz des Namens ist es für Formulardaten)."

Als URL Dokumentation der Klasse heißt es:

Die empfohlene Methode zur Verwaltung der Kodierung und Dekodierung von URLs ist zu verwenden. URI und die Konvertierung zwischen diesen beiden Klassen mit toURI() y URI.toURL() .

En URLEncoder y URLDecoder Klassen können auch HTML-Formular-Kodierung, die nicht mit dem Kodierungsschema übereinstimmt definiert in RFC2396 .

Im Grunde genommen:

String url = "https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type";
System.out.println(new java.net.URI(url).getPath());

geben:

https://mywebsite/docs/english/site/mybook.do?request_type

16voto

laz Punkte 27769

%3A y %2F sind URL-kodierte Zeichen. Verwenden Sie diesen Java-Code, um sie wieder in : y /

String decoded = java.net.URLDecoder.decode(url, "UTF-8");

6voto

Sorter Punkte 8826

Ich benutze Apache Commons

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

Der Standardzeichensatz ist UTF-8

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X