In Java möchte ich Folgendes 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. Wie heißen diese %3A
und %2F
Formate und wie konvertiere ich sie?
java
url-encoding
Crackerplace
quelle
quelle
url
Zeichenfolge ASCII sind, und dies gilt auch, nachdem die Zeichenfolge URL-decodiert wurde.'%'
ist ein ASCII-Zeichen und%xx
stellt ein ASCII-Zeichen dar, wennxx
es kleiner als (hexadezimal) ist80
.Antworten:
Dies hat nichts mit Zeichencodierungen wie UTF-8 oder ASCII zu tun. Die Zeichenfolge, die Sie dort haben, ist URL-codiert . Diese Art der Codierung ist etwas völlig anderes als die Zeichencodierung.
Versuchen Sie so etwas:
Java 10 hat
Charset
der API direkte Unterstützung hinzugefügt , sodass UnsupportedEncodingException nicht abgefangen werden muss:Beachten Sie, dass eine Zeichencodierung (wie UTF-8 oder ASCII) die Zuordnung von Zeichen zu Rohbytes bestimmt. Eine gute Einführung in die Zeichenkodierung finden Sie in diesem Artikel .
quelle
URLDecoder
sind statisch, sodass Sie keine neue Instanz davon erstellen müssen."UTF-8"
), ist gemäß der Java 7-API-Dokumentation veraltet. Verwenden Sie die Version mit zwei Parametern.StandardCharsets.UTF_8.name()
aus diesem Paket :java.nio.charset.StandardCharsets
. Relevant dafür: LinkDie Zeichenfolge, die Sie haben, ist in
application/x-www-form-urlencoded
Codierung.Verwenden Sie URLDecoder , um es in Java String zu konvertieren.
quelle
Dies beantwortet wurde vor (obwohl diese Frage zuerst war!):
In der Dokumentation zur URL- Klasse heißt es:
Grundsätzlich:
werde dir geben:
quelle
URLDecoder.decode(String, String)
Überlastung nicht veraltet. Sie müssen sich auf dieURLDecoder.decode(String)
Überlastung ohne die Codierung beziehen . Möglicherweise möchten Sie Ihren Beitrag zur Verdeutlichung aktualisieren.@deprecated The resulting string may vary depending on the platform's default encoding. Instead, use the decode(String,String) method to specify the encoding.
https%3A%2F...
) als nur den Pfad eines URI behandelt. Es gibt keine Berechtigung oder Abfrage usw. Dies kann getestet werden, indem die entsprechenden get-Methoden für das URI-Objekt aufgerufen werden. Wenn Sie den dekodierten Text an den URI-Konstruktor: übergebennew URI("https://mywebsite/do.....")
, führen AufrufgetPath()
und andere Methoden zu korrekten Ergebnissen.%3A
und%2F
sind URL-codierte Zeichen. Verwenden Sie diesen Java-Code, um sie wieder in:
und zu konvertieren/
quelle
quelle
quelle
Ich benutze Apache Commons
Der Standardzeichensatz ist
UTF-8
quelle
Sie können Ihre Methode mit Bedacht auswählen :)
quelle
Verwenden der Klasse java.net.URI:
Bitte beachten Sie, dass die Ausnahmebehandlung besser sein kann, für dieses Beispiel jedoch nicht sehr relevant ist.
quelle