Ernst Aschbacher: ISO 8859-1 vs. ISO 8859-5

hallo,

ich hätte eine frage zu zeichensätzen in einem xsl-file. wir verwenden einen pdf-generator (java), der eine xml-datei erzeugt und dazu ein xsl-stylesheet verwendet (alles utf-8 definiert). funktioniert auch alles wunderbar wenn die hard-codierten texte im xsl aus ISO 8859-1 (latin-1) zeichen bestehen.

nun soll der text aber auch in kyrillisch ausgegeben werden (ISO 8859-5). im editor werden dies auch korrekt angezeigt, produziere ich jedoch das pdf mit dem pdf-generator sind am pdf statt der kyrillischen zeichen nur #-zeichen sichtbar.

kann mir hier vielleicht jemand helfen?

vielen dank, lg ernst

  1. Tach!

    nun soll der text aber auch in kyrillisch ausgegeben werden (ISO 8859-5).

    Verwende UTF-8, durchgehend! Alles was kein UTF-8 ist, solltest du nach da konvertieren. XML und die Tools sind üblicherweise auf UTF-8-Verarbeitung ausgelegt. Wenn du am Ende doch ein System bedienen musst, das kein UTF-8 kann, dann kannst du das Ergebnis konvertieren (solange es ein Textformat ist und kein binäres).

    dedlfix.

    1. hallo dedlfix,

      danke für deine antwort. es ist aber schon korrekt, dass kyrillische zeichen unter utf-8 fallen oder? ich habe auch gelesen, dass unsere westeuropäischen zeichen in latin-1 untergebracht sind. andere zeichen jedoch in latin-1 extended a und b zum beispiel. fallen diese nicht alle unter utf-8? bin mir jetzt nicht sicher wie ich weiter vorgehen soll.

      lg ernst

      1. Hallo Ernst,

        danke für deine antwort. es ist aber schon korrekt, dass kyrillische zeichen unter utf-8 fallen oder? ich habe auch gelesen, dass unsere westeuropäischen zeichen in latin-1 untergebracht sind. andere zeichen jedoch in latin-1 extended a und b zum beispiel. fallen diese nicht alle unter utf-8? bin mir jetzt nicht sicher wie ich weiter vorgehen soll.

        UTF-8 ist eine Kodierungsmethode, die Unicode kodiert. Und Unicode enthält sowohl unsere westeuropäischen Zeichen als auch die kyrillischen als auch die diversen asiatischen. Einfach Unicode mit UTF-8 nutzen und alles wird gut :)

        LG,
        CK

        1. hallo christian,

          danke für deine antwort. das habe ich auch gemeint, dass eigentlich alle zeichen enthalten sein sollten. mein xsl-file ist am beginn definiert, wie hier beschrieben:

          <?xml version="1.0" encoding="UTF-8"?>
          <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"          xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
          

          ist das so korrekt bzw. genügt das? wie gesagt, werden die zeichen beim erzeugen des pdf-files dann alles als # dargestellt.

          lg ernst

          [Vollzitat entfernt]

          1. Moin,

            mein xsl-file ist am beginn definiert, wie hier beschrieben:

            <?xml version="1.0" encoding="UTF-8"?>
            <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"          xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
            

            ist das so korrekt bzw. genügt das?

            das ist so korrekt (soweit ich erkennen kann), aber es genügt natürlich nicht. Wenn du behauptest, UTF-8 zu verwenden, müssen die Zeichen auch tatsächlich in UTF-8 codiert sein.

            wie gesagt, werden die zeichen beim erzeugen des pdf-files dann alles als # dargestellt.

            Das deutet darauf hin, dass du, obwohl du im Header UTF-8 deklarierst, trotzdem noch irgendeine ISO-Codierung verwendest. Dein Java-Tool muss also auch UTF-8 anstatt ISO-8859-x erzeugen.

            So long,
             Martin

            --
            Bei der Umsetzung von guten Ideen hapert es meist viel mehr an der Wolle als an der Könne.
          2. Hallo Ernst,

            danke für deine antwort. das habe ich auch gemeint, dass eigentlich alle zeichen enthalten sein sollten. mein xsl-file ist am beginn definiert, wie hier beschrieben:

            <?xml version="1.0" encoding="UTF-8"?>
            <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"          xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
            

            ist das so korrekt bzw. genügt das? wie gesagt, werden die zeichen beim erzeugen des pdf-files dann alles als # dargestellt.

            Das ist die Kodierung des Stylesheets. Sinnvoll wäre, auch die Kodierung der Ausgabe explizit unterhalb von xsl:stylesheet anzugeben anzugeben:

            <xsl:output method="xml" encoding="UTF-8"/>
            

            Die XSLT-Version 1.1 ist eher ungewöhnlich, 1.0, 2.0 und 3.0 sind je nach Prozessor und Sprachumfang relevant(er).

            Grüße, Thomas

      2. Tach!

        es ist aber schon korrekt, dass kyrillische zeichen unter utf-8 fallen oder? ich habe auch gelesen, dass unsere westeuropäischen zeichen in latin-1 untergebracht sind. andere zeichen jedoch in latin-1 extended a und b zum beispiel. fallen diese nicht alle unter utf-8? bin mir jetzt nicht sicher wie ich weiter vorgehen soll.

        Du könntest Grundlagenwissen aufbauen, um Verständnis von Zeichensystemen auf dem Computer zu bekommen. Und dann nimm UTF-8.

        dedlfix.

        1. hallo,

          danke für den link zur zeichenkodierung. aber eine antwort auf meine frage habe ich jetzt leider immer noch nicht :-). ich habe am anfang der xsl-datei encoding mit utf-8 definiert, im editor werden mir die kyrillischen zeichen auch angezeigt, aber am endprodukt (= pdf-datei) erscheinen lauter #. um utf-8 zu verwenden - wie ihr es geschrieben habt - genügt es also nicht utf-8 im header der xsl-datei zu definieren?

          [Vollzitat entfernt]

          1. Hallo,

            danke für den link zur zeichenkodierung. aber eine antwort auf meine frage habe ich jetzt leider immer noch nicht :-). ich habe am anfang der xsl-datei encoding mit utf-8 definiert, im editor werden mir die kyrillischen zeichen auch angezeigt, aber am endprodukt (= pdf-datei) erscheinen lauter #. um utf-8 zu verwenden - wie ihr es geschrieben habt - genügt es also nicht utf-8 im header der xsl-datei zu definieren?

            welche Kodierung zeigt dein Editor denn an?

            Gruß
            Jürgen

          2. Hallo Ernst Aschbacher,

            um utf-8 zu verwenden - wie ihr es geschrieben habt - genügt es also nicht utf-8 im header der xsl-datei zu definieren?

            Nein, du darfst nicht nur behaupten UTF-8 zu verwenden, du musst es auch tun. Der header ist quasi nur das Etikett. Der Inhalt einer Wasserflasche ist von einem Rotweinetikett vollkommen unbeeindruckt.

            Bis demnächst
            Matthias

            --
            Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
          3. Tach!

            danke für den link zur zeichenkodierung. aber eine antwort auf meine frage habe ich jetzt leider immer noch nicht :-).

            Ja, der Artikel beantwortet dein Problem nicht. Er sollte dir aber helfen, mit den Begrifflichkeiten und dem System an sich klarzukommen. Bei einem Haus kann man nicht einfach so etwas ranfrickeln, man muss die Statik des gesamten Gebäudes beachten und dazu braucht man entsprechendes Wissen. Dierses Wissen ist auch die Grundlage dafür, das Haus so erweitern zu können, dass es nicht beim nächsten Windhauch einstürzt.

            ich habe am anfang der xsl-datei encoding mit utf-8 definiert, im editor werden mir die kyrillischen zeichen auch angezeigt, aber am endprodukt (= pdf-datei) erscheinen lauter #. um utf-8 zu verwenden - wie ihr es geschrieben habt - genügt es also nicht utf-8 im header der xsl-datei zu definieren?

            Informationen zur Zeichenkodierung im Header einer Datei oder auch anderswo notierte Metadaten geben dem lesenden Prozess an, nach welcher Kodierung er den Datenstrom zu interpretieren hat. Es kann gut sein, dass das lesende Programm diese Information auch komplett ignoriert und man es händischn irgendwie angeben muss, dass diese Kodierung zum Lesen verwendet werden muss.

            Es ist nicht sichergestellt, dass Editoren diese Kodierung von sich aus verwenden, wenn du die Datei speicherst. Ebensowenig sind andere Programme in der Lage, die Kodierungen automatisch zu verwenden, wenn sie Dateien schreiben. Genausowenig wie es Aufgabe des Etikettes einer Flasche ist, dafür zu sorgen, dass diese Flasche nur mit dem darauf vermerkten Produkt gefüllt werden kann. Das muss der Abfüller sicherstellen. Und genauso musst du sicherstellen, dass dein Editor oder anderes Programm die Daten in der korrekten Kodierung schreibt. Wie das konkret geht, ist je nach System unterschiedlich.

            Zu deinem konkreten Problem kann ich nichts konkretes sagen, weil ich deine Systeme nicht kenne. Da musst du mal selbst die Dokumentation bemühen und suchen, wie man Zeichenkodierungen einstellt oder angibt.

            dedlfix.

  2. Schritt für Schritt vorgehen, da findest Du auch den Fehler. Guck zuerst, ob Deine Quelldatei tatsächlich UTF-8-kodierte Zeichen hat. Die kyrillischen haben eine bestimmte Bytefolge, z.B.

    CYRILLIC CAPITAL LETTER EF Ф

    hat die Bytefolge D0 A4. Kyrill. Zeichen in UTF-8-Kodierung haben also Bytes von D0 80 bis D4 91, das sind die die mein Browser darstellen kann. Nach solchen Bytefolgen also gucken, ob die tatsächlich so vorliegen. Und dann gucken, ob der PDF-Konverter damit umgehen kann.

    Wenn die Zeichen in ISO sind, sind die PDF dann lesbar? Wäre auch zu testen.