ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
994
994
EMPFEHLEN
-
Hi zusammen,
ich habe ein Umlautproblem in einer Webapplikation welche auf Tomcat 5.5 laufen.
Auf meiner Lokalen Installation werden Umlaute korrekt aungezeigt und in die Datenbank gespeichert, auf der Serverinstallation werden sie nur als ? gespeichert.
Beide Webanwendungen verbinden sich auf die selbe Datenbank:
- Mysql, varchar-Spalten verwenden utf8.
- Verwendeter Connectionstring: jdbc:mysql://servername/foo_test?characterEncoding=utf-8&useUnicode=true&jdbcCompliantTruncation=false
Folgender http-Request kommt rein:
http://servername:8080/servlet/Impor...0%20ge%E4ndert
Der Querystring wird im Servlet mit Hilfe von org.apache.commons.codec.net.URLCodec.URLCodec dekodiert:
Code :1 2 3
String unparsedParameters = request.getQueryString(); URLCodec codec = new URLCodec("ISO-8859-1"); result = codec.decode(unparsedParameters);
Das Wort "geändert" wird im dekodierten String auf der lokalen Installation (Windows) korrektangezeigt und in die Datenbank übertragen. Bei der Linux-Installation heißt es "ge?ndert".
Kann mir jemand weiterhelfen?
Danke.
-
Hi,
wie steht es denn mit dem Encoding des Servers? Bei Debian: dpkg-reconfigure locale
Grüße
Peter
-
Fehler behoben.
Anstatt
Code :1
codec.decode(unparsedParameters);
mache ich das nun so:
Code :1 2 3 4 5
fURLDecodigCharset = "ISO8859-1"; ... byte[] bytes = originalParam.getBytes(fURLDecodigCharset); byte[] decodeUrl = URLCodec.decodeUrl(bytes); result = new String (decodeUrl, fURLDecodigCharset);
Der Grund liegt wohl daran, dass bei der Umwandlung des Bytearrays zu einem String mit der alten Variante das defaultcharset verwendet wird, und das möglicherweise irgendwas ist, nur nicht iso-8859-1.
Siehe java.lang.StringCoding.decode(byte[], int, int)
dort wird der Defaultcharset benutzt.
String csn = Charset.defaultCharset().name();
Das erklärt auch, dass es sich unter Windows und Linux unterschiedliche verhält.The default charset is determined during virtual-machine startup and typically depends upon the locale and charset of the underlying operating system.
Danke.
-
Bin gerade darauf hingewiesen worden, dass es auch noch einfacher geht.
Code :1 2 3 4 5 6
import org.apache.commons.codec.net.URLCodec; ... ... URLCodec urlCodec= new URLCodec(fURLDecodigCharset); urlCodec.decode(originalParam, fURLDecodigCharset);
Geändert von SOLOWK1 (26.08.10 um 13:28 Uhr) Grund: Ausführlicher beschrieben
Ähnliche Themen
-
Java servlet (auf Tomcat)
Von Liutasil im Forum JavaAntworten: 8Letzter Beitrag: 03.02.08, 23:25 -
Tomcat log per Servlet auslesen?
Von derChris im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 12.12.07, 12:56 -
Umlaute an Servlet übergeben
Von SeeSharpNewBee im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 06.06.07, 20:25 -
Tomcat: Servlet zu Port
Von dadevelopa im Forum Hosting & WebserverAntworten: 0Letzter Beitrag: 24.01.06, 14:42 -
Prob mit Tomcat und Servlet
Von Robout im Forum JavaAntworten: 6Letzter Beitrag: 17.09.05, 17:47





Zitieren
Login




