UTF-8 nach ISO 8859-1?



  • Tach.

    Ich schreibe ein Programm, das u.a. XML-Dateien auslesen und darin enthaltene Werte in eine Datenbank (momentan .mdb-Datei von Access, soll aber später durch DB2 ersetzt werden) eintragen muß. Da erstere standardmäßig in UTF-8 (oder UTF-16, kommt in meinem Fall aber nicht vor) kodiert sind, ergibt sich ein Problem, wenn Umlaute in die Datenbank eingetragen werden müssen, da diese bei UTF-8 zwei Bytes lang sind.

    Nun könnte man meinen, daß eine Routine, die UTF-8 zu Latin-1 (ISO 8859-1) umwandelt, ausreichen sollte. Was ist jedoch, wenn das Programm irgendwoanders laufen soll als in Westeuropa?

    Wer sollte diese Konvertierung generell vornehmen? Die Datenbank? Oder muß ich Betriebssystemfunktionen aufrufen, um die Codepage des Systems zu ermitteln, in die dann konvertiert wird? Falls ja, kennt jemand eine plattformunabhängige und kostenlose Bibliothek, die eine solche Konvertierung vornehmen kann?

    Fragen über Fragen, aber vielleicht kennt sich ja jemand in der Materie aus. Ich hab mich gestern erstmals mit den ganzen Codierungen befaßt und mir ist bei deren Vielzahl richtig schlecht geworden. 😉

    Vielen Dank im voraus.



  • Warum die Daten nicht in UTF-8 in der Datenbank abspeichern? Heutzutage benutzt doch jeder Vernünftige nur noch UTF-8.



  • Da du leicht UTF-8 Zeichen fälschlicherweise in andere 8bit Zeichencodes pressen kannst, wirst du dich wohl manuell darum kümmern müssen. Umwandlungen kannst du mit der IBM ICU Library oder iconv bzw. APR-Iconv machen. Wobei du beachten solltest, dass nicht für jedes Zeichen was du mit UTF-8 darstellen kannst (UNICODE) ein entsprechendes ISO 8859-1 Zeichen existiert!



  • @Ponto: Naja, zumindest die Access-Datenbank scheint nur Latin-1 zu kennen und zeigt UTF-8-Umlaute dementsprechend falsch an.

    @kingruendi: Mittlerweile hab ich es auch selbst implementiert. Nach Rücksprache mit meinem Chef entschieden wir uns, alle Codes, die noch im gültigen Bereich von ISO 8859-1 liegen umzuwandeln und die anderen einfach 1:1 in die DB zu schreiben, so daß Fehler noch sichtbar sind.
    Dennoch danke - ich schau mir die Lib trotzdem mal an, das Thema könnte in Zukunft wieder interessant werden.


Anmelden zum Antworten