So parsen Sie einen URI in Java

7

Ich versuche, den folgenden URI zu analysieren: Ссылка

, aber diese Fehlermeldung wurde angezeigt:

%Vor%

Es ist ein Problem mit dem "|" Charakter, wenn ich das "|" loswerde, verursacht das letzte chinesische Zeichen kein Problem, was ist der richtige Weg, damit umzugehen?

Meine Methode sieht so aus:

%Vor%

Danke für die Antworten, aber die Lösung von BalusC scheint nur für eine Instanz der URL zu funktionieren, meine Methode muss mit jeder URL funktionieren, die ich an sie weitergebe. Woher weiß sie, wo der Ausgangspunkt ist, um die URL in zwei Teile zu schneiden und nur den zweiten Teil kodieren?

    
Frank 01.12.2009, 20:22
quelle

7 Antworten

13

Das Pipe-Zeichen ist "als unsicher eingestuft" für die Verwendung in URLs. Sie können es beheben, indem Sie das | ersetzen mit seinem codierten Hex-Äquivalent, das wäre "% 7C"

Das Ersetzen einzelner Zeichen in einer URL ist jedoch eine spröde Lösung, die nicht sehr gut funktioniert, wenn Sie bedenken, dass in einer beliebigen URL möglicherweise eine ganze Reihe verschiedener Zeichen vorhanden sein können, die möglicherweise ersetzt werden müssen. Sie ersetzen bereits Leerzeichen, Cursor und Pipes .... aber was ist mit Klammern, Akzentzeichen und Anführungszeichen? Oder Fragezeichen und kaufmännische Und-Zeichen, die gültige Teile einer URL sein können oder nicht, je nachdem, wie sie verwendet werden?

Eine bessere Lösung wäre also, die Sprachfunktion zum Codieren von URLs zu verwenden, anstatt sie manuell auszuführen. Im Fall von Java verwenden Sie URLEncoder , wie in der Beispiel in der Antwort von BalusC auf diese Frage.

    
Spike Williams 01.12.2009, 20:27
quelle
10

Die URLEncoder-Lösung hat bei mir nicht funktioniert, vielleicht weil sie einfach alles codiert. Ich habe versucht, Apache HttpGet zu verwenden und es Fehler mit einer URL als Zeichenfolge, die wie codiert codiert.

Der richtige Weg in meinem Fall war dieser seltsame Code:

%Vor%

Irgendwie funktioniert url.toURI nicht auf die gleiche Weise. URI-Konstruktoren funktionieren auf zwei Arten: Wenn Sie den einen mit einem einzigen String-Parameter verwenden, gibt der Konstruktor vor, dass das bereitgestellte URI korrekt maskiert ist (und somit der Fehler, dasselbe passiert mit dem String-Konstruktor von HttpGet); Wenn Sie den Konstruktor für mehrere Strings-URIs verwenden, behandelt die Klasse alles, was unescaped ist, sehr gut (und HttpGet hat einen anderen Konstruktor, der einen URI akzeptiert). Warum URL.toURI () dies nicht tut? Ich habe keine Ahnung ...

Ich hoffe, es hilft jemandem, es hat einige Stunden gedauert, bis ich es herausgefunden habe.

    
Federico Pugnali 10.02.2011 17:52
quelle
7

Ist es nicht besser, URLEncoder zu verwenden? selektives Kodieren von Zeug?

    
Geo 01.12.2009 20:29
quelle
6

Sie sollten java.net.URLEncoder verwenden, um die URL zu verschlüsseln Abfrage mit UTF-8 . Sie brauchen dafür nicht unbedingt Regex. Du willst keine Regex haben, um all diese tausenden chinesischen Glyphen abzudecken, oder? ;)

%Vor%     
BalusC 01.12.2009 20:30
quelle
3

Nehmen Sie das Beste aus Federicos Antwort und Mareks Antwort , Sie müssen Folgendes tun:

%Vor%     
Gili 09.03.2014 06:11
quelle
0

Kodieren Sie zuerst Ihre URL, benutzen Sie bitte das folgende Beispiel, dann übergeben Sie die URL in die Methode

%Vor%

// Methode jetzt aufrufen displayFileOrUrlInBrowser (createdJson);

%Vor%     
vaquar khan 16.02.2016 10:33
quelle
-1

Okay, ich habe herausgefunden, wie es geht, so:

%Vor%     
Frank 01.12.2009 20:27
quelle

Tags und Links