tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
994
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SOLOWK1 SOLOWK1 ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    3
    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.
     

  2. #2
    pizza1234 pizza1234 ist offline Mitglied Gold
    Registriert seit
    Jan 2007
    Beiträge
    177
    Hi,

    wie steht es denn mit dem Encoding des Servers? Bei Debian: dpkg-reconfigure locale

    Grüße
    Peter
     

  3. #3
    SOLOWK1 SOLOWK1 ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    3
    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();

    The default charset is determined during virtual-machine startup and typically depends upon the locale and charset of the underlying operating system.
    Das erklärt auch, dass es sich unter Windows und Linux unterschiedliche verhält.

    Danke.
     

  4. #4
    SOLOWK1 SOLOWK1 ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    3
    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

  1. Java servlet (auf Tomcat)
    Von Liutasil im Forum Java
    Antworten: 8
    Letzter Beitrag: 03.02.08, 23:25
  2. Tomcat log per Servlet auslesen?
    Von derChris im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 12.12.07, 12:56
  3. Umlaute an Servlet übergeben
    Von SeeSharpNewBee im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 06.06.07, 20:25
  4. Tomcat: Servlet zu Port
    Von dadevelopa im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 24.01.06, 14:42
  5. Prob mit Tomcat und Servlet
    Von Robout im Forum Java
    Antworten: 6
    Letzter Beitrag: 17.09.05, 17:47

Stichworte