Search the FirstSpirit Knowledge Base
Auf die Gefahr hin, mich als Deppen zu outen:
wir erhalten bei per <jsp:include eingebundene Snippets doppelt UTF-8 encodierte Links.
Auf unseren Frontend-Servern landet de Content per Veröffentlichungs-Servlet, das file.Encoding ist überall utf-8. Auf den Frontend läuft Tomcat. URIEncoding in server.xml ist ebenfalls auf utf-8 gesetzt.
Im Preview (Jetty, Firstspirit) wird alles normal angezeigt, auf den Tomcat auf der Haupteite alles okay, dort wo die <jsp:include einsetzen doppeltes UTF-8-Encoding.
Meine Vermutung ist,
Irgendeinne Idee?
Hallo,
die generierten Seiten enthalten noch korrekt codierte Links?
Das Deployment in FirstSpirit ist erst einmal unabhängig davon, welcher jsp Code geschrieben wird und sollte deshalb noch korrekt funktionieren.
Ich könnte mir deshalb als mögliche Fehlerquellen die Konfiguration des Tomcats oder ein fehlerhaftes jsp Dokument vorstellen.
Viele Grüße
Rouven
Nah, die Sache wird noch komplizierter.
Neben der Übertragung per doStore(), die man durchaus mit request.setCharacterEncoding() beeinflussen kann und den zusätzlichen <init-param> in der web.xml mit formEncoding haben wir festgestellt, daß man dem JDBC-Connector/J für MySQL 5.x auch noch einen
&useUnicode=true&characterEncoding=UTF8
mitgeben kann. Die alles entscheidende Frage nun - muß ich bei Umstellung die gesamte DB neu importieren/exportieren oder bleiben die Daten valide?
Wenn du auf der sicheren Seite sein willst, wirst du die Daten importieren/exportieren, ggf. sogar konvertieren müssen. Kommt darauf an, was für ein Encoding die Datenbank vorher hatte und welche Zeichen in den bisherigen Daten vorhanden sind.
Ein paar Links, die vielleicht helfen:
Ich glaube es läuft in erster Linie auf die richtige Nutzung des FSIntegration-Modules (DynamicDatabaseAccess), deren Implementierung in den Templates hinaus. Habt ihr da Erfahrung?
Die Umstellung des Datenbankzugriffs ergab üble Exceptions:
de.espirit.or.ORException: java.sql.SQLException: Incorrect string value: '\xC2\x84\xC3\x83\xC2\x96...' for column 'sn0' at row 1 / SQL = INSERT INTO fs_ds.users (sector, position_, mail, sn0, facsimiletelephonenumber, department, isregion, street, housenumber, companyname, iscompany, country, city, fs_gid, mobiletelephonenumber, username, title, academictitle, isinactive, readablepwd, cn0, telephonenumber, zipcode, salutation0, parent_id,
fs_id, fs_valid_from, fs_valid_to, fs_release_to)VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?) / null / [sector (12): IT-Unternehmen=>;IT-Unternehmen, position_ (12): , mail (12): khamsonh.marcel@khounlivong.de, sn0
(12): ÄÖÜ Khounlivong, facsimiletelephonenumber (12): , department (12): IT, isregion (16): false, street (12): Dittrichring, housenumber (12): 17, companyname (12): PIN Khounlivong, iscompany (16): false, country (12): , city (12): Leipzig, fs_gid (-2): 979b3dc5-5145-4ed6-b196-8ace2d0a7a98,
mobiletelephonenumber (12): +49 (0)177-59039-50, username (12): khamsonh.marcel@khounlivong.de, title (12): , academictitle (12):
Dipl.-Ing., isinactive (16): true, readablepwd (12): not-generated-yet, cn0 (12): Khamsonh äöüß, telephonenumber (12): +49 (0)341-98989-15, zipcode (12): 04109, salutation0 (12): Herr, parent_id (-5): 1735, fs_id (4): 43328, fs_valid_from (-5): 1368413455001, fs_valid_to (-5): 223372036854775807, fs_release_to (-5): 0]
Nested message: Incorrect string value: '\xC2\x84\xC3\x83\xC2\x96...' for column 'sn0' at row 1
de.espirit.or.impl.AbstractUpdateStatement.execute(AbstractUpdateStatement.java:171)
de.espirit.or.impl.AbstractUpdateStatement.executeUpdate(AbstractUpdateStatement.java:74)
de.espirit.or.impl.TemporalCommandHandler.handle(TemporalCommandHandler.java:77)
de.espirit.or.impl.CreateCommand.accept(CreateCommand.java:49)
de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:655)
de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:77)
de.espirit.or.impl.SessionImpl.doCommit(SessionImpl.java:195)
de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:568)
de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:554)
de.espirit.firstspirit.opt.integration.web.StoreServlet.doStore(StoreServlet.java:259)
de.espirit.firstspirit.opt.integration.web.StoreServlet.doPost(StoreServlet.java:140)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
de.espirit.firstspirit.acl.servlet.MultiAccessControlFilter.doFilter(MultiAccessControlFilter.java:110)
root cause
java.sql.SQLException: Incorrect string value: '\xC2\x84\xC3\x83\xC2\x96...' for column 'sn0' at row 1
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
de.espirit.or.impl.AbstractUpdateStatement.execute(AbstractUpdateStatement.java:169)
de.espirit.or.impl.AbstractUpdateStatement.executeUpdate(AbstractUpdateStatement.java:74)
de.espirit.or.impl.TemporalCommandHandler.handle(TemporalCommandHandler.java:77)
de.espirit.or.impl.CreateCommand.accept(CreateCommand.java:49)
de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:655)
de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:77)
de.espirit.or.impl.SessionImpl.doCommit(SessionImpl.java:195)
de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:568)
de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:554)
de.espirit.firstspirit.opt.integration.web.StoreServlet.doStore(StoreServlet.java:259)
de.espirit.firstspirit.opt.integration.web.StoreServlet.doPost(StoreServlet.java:140)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
de.espirit.firstspirit.acl.servlet.MultiAccessControlFilter.doFilter(MultiAccessControlFilter.java:110)
Wie müssen unsere Entwickler die Formulare gestalten?
Hallo,
da ich annehme, dass Rouvens und Christophs Antworten weitergeholfen haben, markiere ich diesen Thread als beantwortet.
Sollten weitere Fragen bestehen, bitte ein neues Posting eröffnen.
Viele Grüße
Michaela