Wie führt man die URL-Decodierung in Java durch?

Lesezeit: 5 Minuten

Wie fuhrt man die URL Decodierung in Java durch
Crackerplatz

In Java möchte ich dies konvertieren:

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

Dazu:

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

Das habe ich bisher:

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 ist das %3A und %2F Formate genannt und wie konvertiere ich sie?

  • @Stephen .. Warum kann eine URL keine UTF-8-codierte Zeichenfolge sein .. ?

    – Crackerplatz

    26. Mai 2011 um 12:14 Uhr


  • Das Problem ist, dass die Frage wirklich besteht, nur weil die URL UTF-8 sein kann nichts mit UTF-8 zu tun. Ich habe die Frage entsprechend bearbeitet.

    – Chris Jester-Young

    26. Mai 2011 um 12:19 Uhr

  • Es könnte (theoretisch) sein, aber die Zeichenfolge in Ihrem Beispiel ist keine UTF-8-codierte Zeichenfolge. Es ist eine URL-codierte ASCII-Zeichenfolge. Daher ist der Titel irreführend.

    – Stefan C

    26. Mai 2011 um 12:20 Uhr

  • Es ist auch erwähnenswert, dass alle Charaktere in der url Zeichenfolge sind ASCII, und dies gilt auch, nachdem die Zeichenfolge URL-dekodiert wurde. '%' ist ein ASCII-Zeichen und %xx stellt ein ASCII-Zeichen dar, wenn xx ist kleiner als (hexadezimal) 80.

    – Stefan C

    26. Mai 2011 um 12:34 Uhr

1646319429 606 Wie fuhrt man die URL Decodierung in Java durch
Jesper

Das hat nichts mit Zeichenkodierungen wie UTF-8 oder ASCII zu tun. Die Zeichenfolge, die Sie dort haben, ist URL-codiert. 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 hat direkte Unterstützung für hinzugefügt Charset an die API, was bedeutet, dass UnsupportedEncodingException nicht abgefangen werden muss:

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

Beachten Sie, dass a Zeichenkodierung (wie UTF-8 oder ASCII) bestimmt die Zuordnung von Zeichen zu Rohbytes. Eine gute Einführung in die Zeichencodierung finden Sie unter Dieser Beitrag.

  • Die Methoden weiter URLDecoder sind statisch, sodass Sie keine neue Instanz davon erstellen müssen.

    – faul

    26. Mai 2011 um 12:37 Uhr

  • @Trismegistos Nur die Version, in der Sie die Zeichencodierung nicht angeben (der zweite Parameter, "UTF-8") ist gemäß der Java 7-API-Dokumentation veraltet. Verwenden Sie die Version mit zwei Parametern.

    – Jesper

    19. Dezember 2012 um 15:47 Uhr

  • Wenn Sie Java 1.7+ verwenden, können Sie die statische Version der Zeichenfolge “UTF-8” verwenden: StandardCharsets.UTF_8.name() aus diesem Paket: java.nio.charset.StandardCharsets. Passend dazu: Link

    – Schahar

    30. April 2014 um 12:46 Uhr


  • Zur Zeichencodierung ist dies auch ein großartiger Artikel balusc.blogspot.in/2009/05/unicode-how-to-get-characters-right.html

    – Crackerplatz

    16. Juli 2014 um 20:32 Uhr


  • Seien Sie vorsichtig damit. Wie hier angemerkt: blog.lunatech.com/2009/02/03/… Hier geht es nicht um URLs, sondern um die Kodierung von HTML-Formularen.

    – Michael

    27. Mai 2015 um 12:29 Uhr


Die Saite, die Sie haben, ist drin application/x-www-form-urlencoded Codierung.

Verwenden URLDecoder um es in einen Java-String zu konvertieren.

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

Wie fuhrt man die URL Decodierung in Java durch
Nick Greally

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

“Sie sollten dazu java.net.URI verwenden, da die URLDecoder-Klasse x-www-form-urlencoded dekodiert, was falsch ist (trotz des Namens ist es für Formulardaten).”

Als URL Klassendokumentation besagt:

Die empfohlene Methode zum Verwalten der Codierung und Decodierung von URLs ist die Verwendung URIund zum Konvertieren zwischen diesen beiden Klassen mit toURI() und
URI.toURL().

Die URLEncoder und URLDecoder -Klassen können ebenfalls verwendet werden, aber nur für die HTML-Formularcodierung, die nicht mit dem in definierten Codierungsschema identisch ist RFC2396.

Grundsätzlich:

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

werde dir geben:

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

  • In Java 1.7 die URLDecoder.decode(String, String) Überladung ist nicht veraltet. Sie müssen sich auf die beziehen URLDecoder.decode(String) Überlastung ohne die Codierung. Vielleicht möchten Sie Ihren Beitrag zur Klarstellung aktualisieren.

    – Aaron

    18. August 2014 um 18:31 Uhr

  • Diese Antwort ist irreführend; Dieses Blockzitat hat nichts mit der Abwertung zu tun. Das Javadoc der veralteten Methode besagt, und ich zitiere tatsächlich @deprecated The resulting string may vary depending on the platform's default encoding. Instead, use the decode(String,String) method to specify the encoding.

    – Emerson Farrugia

    1. April 2015 um 10:30 Uhr


  • getPath() für URIs gibt nur den Pfadteil des URIs zurück, wie oben erwähnt.

    – Pelpotronic

    25. Juli 2016 um 20:33 Uhr

  • Wenn ich mich nicht irre, ist der “Pfad” bekanntermaßen der Teil einer URI nach dem Autoritätsteil (siehe: en.wikipedia.org/wiki/Uniform_Resource_Identifier für die Definition des Pfades) – es scheint mir, dass das Verhalten, das ich sehe, das Standard-/korrekte Verhalten ist. Ich verwende Java 1.8.0_101 (auf Android Studio). Ich wäre gespannt, was Sie bekommen, wenn “getAuthority()” aufgerufen wird. Sogar dieser Artikel/Beispiel scheint darauf hinzudeuten, dass Pfad nur der Teil /public/manual/appliances ihrer URI ist:quepublishing.com/articles/article.aspx?p=26566&seqNum=3

    – Pelpotronic

    27. Juli 2016 um 18:58 Uhr


  • @Pelpotronic Der Code in der Post druckt tatsächlich die Ausgabe, die er zeigt (zumindest für mich). Ich denke, der Grund dafür ist, dass der URI-Konstruktor aufgrund der URL-Codierung tatsächlich die gesamte Zeichenfolge behandelt (https%3A%2F...), als nur der Pfad eines URI; es gibt keine Berechtigung oder Abfrage usw. Dies kann durch Aufrufen der entsprechenden get-Methoden für das URI-Objekt getestet werden. Wenn Sie den decodierten Text an den URI-Konstruktor übergeben: new URI("https://mywebsite/do.....")dann anrufen getPath() und andere Methoden liefern korrekte Ergebnisse.

    – Kröw

    2. Juni 2019 um 2:26 Uhr


Wie fuhrt man die URL Decodierung in Java durch
faul

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

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

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

1646319430 694 Wie fuhrt man die URL Decodierung in Java durch
Ronak Poriya

public String decodeString(String URL)
    {

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

        }

        return urlString;

    }

1646319431 236 Wie fuhrt man die URL Decodierung in Java durch
Sorter

ich benutze Apache Commons

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

Der Standardzeichensatz ist UTF-8

924530cookie-checkWie führt man die URL-Decodierung in Java durch?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy