it-swarm.com.de

Leerzeichen durch% 20 in Java ersetzen

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 ..

19
user3742241

(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.

17

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:

  • Die alphanumerischen Zeichen "a" bis "z", "A" bis "Z" und "0" Bis "9" bleiben gleich. 
  • Die Sonderzeichen ".", "-", "*" und "_" bleiben gleich.
  • Das Leerzeichen "" wird in ein Pluszeichen "+" umgewandelt.
  • Alle anderen Zeichen sind unsicher und werden zuerst unter Verwendung eines Codierschemas in ein Byte oder mehrere Bytes umgewandelt. Dann wird jedes Byte Durch die 3-stellige Zeichenfolge "% xy" dargestellt, wobei xy die zweistellige -Hexadezimal-Darstellung des Byte ist. Das empfohlene Kodierungsschema ist UTF-8. Aus Gründen der Kompatibilität. Wenn jedoch keine Kodierung angegeben ist, wird die Standardkodierung von verwendet
    Plattform wird verwendet.

Siehe URLEncoder

Ex:

String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + URLEncoder.encode(Origin, "UTF-8");
11
M. Abbas

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.

5
To Kra

Java.net.URLEncoder.encode("Hello World", "UTF-8").replaceAll("\\+", "%20")); einen schönen Tag =).

4
Pregunton

Versuchen 

str.replaceAll("\\s","%20");

Das sollte es beheben

0
Sunit Mishra