khounlivong
Occasional Observer

URIEncoding und <jsp:include

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?

0 Kudos
6 Replies
broszeit
I'm new here

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?

0 Kudos

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?

0 Kudos

Klingt für mich ja eher nach einem Problem wie hier oder hier.

0 Kudos

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

0 Kudos