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"));
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.
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.