UTF-8 Probelm

Hallo,

ich habe eine Webapplikation, basierend auf Struts, JSPs und Hibernate. Die Seiten sind alle valide XHTML-Dokumente mit dem Encoding UTF-8, auch die Postgres-Datenbank steht auf UTF-8.

Mein Problem ist, wenn Daten aus Formularen mit Sonderzeichen, wie ñ, ç etc. in die Datenbank geschrieben werden, kommt nur “ISO-Latin-1”-Schrott an.

Sicherheitshalber habe ich meine Forms auch mit einem Encoding versehen:

<form action="/retrobib/secure/change/changeWerk.html" method="post" accept-charset="UTF-8">

aber das bringt nichts.

Hibernate bekommt die Datenquelle aus der context.xml vom Tomcat:

        <property name="connection.datasource"> 
            java:/comp/env/jdbc/retrobibDB 
        </property> 

        <!-- SQL-dialect for postgresql --> 
        <property name="dialect"> 
            org.hibernate.dialect.PostgreSQLDialect 
        </property>

… die so aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/retrobib"> 
    
    <Resource auth="Container" 
              driverClassName="org.postgresql.Driver" 
              maxActive="8" 
              maxIdle="4" 
              name="jdbc/retrobibDB" 
              password="***" 
              type="javax.sql.DataSource" 
              url="jdbc :p ostgresql://localhost:5432/retrobib" 
              username="***" 
              useUnicode="true" 
              characterEncoding="UTF-8" /> 
          
</Context>

Kann ich dem JDBC-Treiber irgendwo das Encoding der Datenbank mitteilen? Oder Hibernate? Oder hat Jemand einen anderen Tipp?

Die Webapplikation läuft unter OS X.

Grüße,
Christian

Hallo Christian,

das Problem hat etwas mit der “client_encoding” zu tun. Offensichtlich ist ist hier die falsche Encoding angegeben.

Zum Verständnis: Es muss die richtige “client_encoding” angeben werden, damit die Datenbank intern den Zeichensatz des Client in den Zeichensatz der Datenbank (“server_encoding”, hier UTF8) konvertieren kann und umgekehrt.



mfg

fristo