Immer wieder kommt die Problematik mit UTF-8 auf, gerade mit osteuropäischen Zeichensätzen. Darum möchte ich das hier mal kurz klar stellen. Java verwendet intern den UCS-2 Zeichensatz und der ist 16 Bit breit, kann also alle Zeichen halten. Wenn JReport die Daten aus der Datenbank liest, wandelt der JDBC-Treiber alle String-Datenfelder (VARCHAR) in UCS-2 um. Also bestehen innerhalb von Java keine Probleme. Erst bei der Ausgabe in eine Datei muss sich Java entscheiden, wie die Zeichen in Bytefolgen umgewandelt werden sollen. Auf unterster Ebene gäbe es dafür die System Property file.encoding. Aber die wird eigentlich nicht benötigt, da die meisten Ausgabeformate Meta-Information zum Encoding haben, z. B. PDF, HTML, etc.Nur bei Ausgabe nach TXT oder CSV wird das Thema file.encoding relevant.
Nun aber zum Format UTF-8 für String-Felder: dieses Format ermöglicht es Strings als Bytefolgen eines UTF-8 Strings zu interpretieren. Das wäre nur dann der Fall, wenn die Daten z. B. aus einer Datei (per UDS) gelesen würden und zwar im file.encoding=ASCII und dann falsch in Strings gewandelt worde wären. Dann kann man durch Angabe des Formates UTF-8 (statt XXXXXXX) JReport anweisen, den String in Bytes zu konvertieren und diese mit new String (byteArray, new Encoding(“UTF-8″)) wieder als String zusammen zu bauen. Aber eigentlich wäre das Sache der UDS gewesen.
Meiner Meinung nach macht das Format UTF-8 wenig Sinn und sollte nicht genutzt werden.
