String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins="+Origin+"&destinations="+destination+"&mode=driving&sensor=false&language=en-EN&units=imperial";
url = url.replaceAll(" ", "%20");
Ausgabe :
http://maps.googleapis.com/maps/api/distancematrix/xml?origins=150%20Sutter%20St%20San%20Francisco,%20CA,%20United%20States&destinations=1%20Palmer%20Sq%20E
Princeton,%20NJ%2008542&mode=driving&sensor=false&language=en-EN&units=imperial
Aber ich bekomme eine Fehlermeldung, die sagt:
Java.net.MalformedURLException: Illegal character in URL
Kann mir jemand aushelfen ..
(Hinweis: siehe Update unten)
Verwenden Sie die URLEncoder
-Klasse aus dem Java.net
-Paket. Leerzeichen sind nicht die einzigen Zeichen, die in URLs mit Escapezeichen versehen werden müssen. URLEncoder
sorgt dafür, dass alle Zeichen, die codiert werden müssen, ordnungsgemäß codiert sind.
Hier ist ein kleines Beispiel:
String url = "http://...";
String encodedUrl = null;
try {
encodedUrl = URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException ignored) {
// Can be safely ignored because UTF-8 is always supported
}
Update
Wie in den Kommentaren und anderen Antworten auf diese Frage hervorgehoben, kann die URLEncoder
-Klasse nur die Abfragezeichenfolgeparameter einer URL codieren. Derzeit verlasse ich mich auf Guavas UrlEscapers
, um verschiedene Teile einer URL sicher zu codieren.
Sie sollten nicht String.replaceAll
aufrufen, um eine URL zu kodieren, sondern Java.net.URLEncoder.encode(String s, String enc)
.
Beachten Sie, dass Sie nur die Abfragezeichenfolgeparameter (Name und Wert) und nicht die gesamte URL codieren müssen.
Beim Codieren eines Strings mit Java.net.URLEncoder.encode(String s, String enc)
gelten die folgenden Regeln:
Siehe URLEncoder
Ex:
String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + URLEncoder.encode(Origin, "UTF-8");
Hier ist die Antwort, die mir geholfen hat: HTTP URL Address Encoding in Java
Es werden nur URL
& URI
-Objekte verwendet.
Ursprünglicher Ansatz, der oben in diesem Thread mit URLEncoder
erwähnt wurde, kodierte alle Zeichen in der URL einschließlich http://
und die Verwendung dieser url
warf exception
in httpConnection
- daher ist dies keine gute Option. Ich verwende jetzt den URL/URI
-Ansatz, der in link erwähnt wird, und er funktioniert wie erwartet.
Java.net.URLEncoder.encode("Hello World", "UTF-8").replaceAll("\\+", "%20"));
einen schönen Tag =).
Versuchen
str.replaceAll("\\s","%20");
Das sollte es beheben