URL Codieren

HAllo *,

ich möchte gern einen String mit Leerzeichen in eine Browserurl umwandeln (glaube das heißt „x-www-form-urlencoded“).

Beispiel aus:
Text mit Leerzeichen

Soll:
Text%20mit%20Leerzeichen

werden.

Wenn ich die Klasse URLEncoder aus dem Package java.net verwende,
wird da leider:
Text+mit+Leerzeichen
draus

Gibt es das eine Klasse die die Leerzeichen in %20 konvertiert?

Danke & Gruß

Christian

Hallo,

ich möchte gern einen String mit Leerzeichen in eine
Browserurl umwandeln (glaube das heißt
„x-www-form-urlencoded“).
(…)
wird da leider:
Text+mit+Leerzeichen
draus

damit müsste es eigentlich auch funktionieren, falls nicht

String s = "Text mit Leerzeichen";
System.out.println(s.replaceAll(" ","%20"));

gruß
Heavy

Ergänzung…

String s = „Text mit Leerzeichen“;
System.out.println(s.replaceAll(" „,“%20"));

Falls der String noch andere Sonderzeichen enthält, und die Pluszeichen wirklich Probleme machen wäre natürlich eine Kombination der beiden Methoden besser:

String s = "Text mit öäü und Leerzeichen";
String encoded = java.net.URLEncoder.encode(s, "ISO-8859-1");
System.out.println(encoded.replaceAll("\\+","%20"));

gruß
Heavy

P.S.: die replaceAll Methode erwartet als erstes Argument eine Regular Expression, das Pluszeichen ist dabei ein Spezialzeichen, und muß deshalb escaped werden, daher die Backslashes.

Danke
Hallo Heavy,

ich bin dann letztlich auf die gleiche Idee gekommen.
Einziger Unterschied war, daß ich Java 1.3 verwenden muß (wegen BEA Weblogic 6).

Meine Lösung (in deinen Code eingebaut)

String s = "Text mit öäü und Leerzeichen";
String encoded = java.net.URLEncoder.encode(s); //die Variante mit Encoding gibt es erst ab Java 1.4
// Das geht mit 1.3 leider auch noch nicht: System.out.println(encoded.replaceAll("\\+","%20"));
System.out.println(StringTools.replace(encoded, "+", "%20")); //eigene replace-routine

Ursprünglich habe ich den Aufwand getrieben, um für einen Download, im HTTP-Response-Header, den korrekten Filename zu senden.
Leider musste ich feststellen das der Filename beim Client im Speicherndialog als „Datei%20mit%20Leerzeichen.pdf“ dargestellt wurde.

Ein double-qoute um den Filename hat dann das Problem gelößt.
Also konnte bzw. mußte ich auf die Stringkovertierung verzichten.

Danke
Heavy