Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Zeichensatzerkennung

Für die korrekte Verarbeitung eines XML-Dokuments ist es entscheidend, den Zeichensatz zu kennen, der zur Darstellung des Dokuments verwendet wird. XML erlaubt die Angabe dieses Zeichensatzes in einer Zeichensatz-Deklaration innerhalb des Dokuments. Bei Datenübertragungen zwischen verschiedenen Datenverarbeitungssystemen erfolgen i.A. auch Konvertierungen der verwendeten Zeichensätze, jedoch keine inhaltlichen Änderungen. Das kann dazu führen, dass die Angabe des Zeichensatzes im XML-Dokument nicht mehr mit dem Zeichensatz übereinstimmt, der tatsächlich zur Darstellung verwendet wird.

Um die Zeichensatz-Deklaration im XML-Dokument erkennen zu können, muss bereits vorher für das Lesen des Dokuments eine Annahme über den verwendeten Zeichensatz getroffen worden sein. Dies ist näherungsweise möglich, da ein wohlgeformtes XML-Dokument immer mit der Zeichenfolge <?xml beginnen muss. Durch Vergleich des Dokumentanfangs mit der Darstellung dieser charakteristischen Zeichenfolge in den verschiedenen, vom Parser unterstützten Zeichensätzen, lässt sich ein aktuell für das XML-Dokument verwendeter Zeichensatz ableiten.

Darüber hinaus erlaubt das BS2000/OSD für Dateien die Vergabe eines Dateiattributs, das einen Zeichensatz benennt (CODED-CHARACTER-SET), erzwingt jedoch nicht, dass der Dateiinhalt in diesem Zeichensatz dargestellt ist. Bei der Bereitstellung von XML-Dokumenten im Arbeitsspeicher, die in COBOL zusätzlich möglich ist, lässt sich aus den Angaben im Programm ebenfalls ein Zeichensatz ableiten, der für die Darstellung des Dokuments verwendet wird, siehe Handbuch „COBOL 2000 Sprachbeschreibung“ [ 1], Abschnitt „ASSIGN-Klausel“.

Es gibt folglich drei Quellen, aus denen sich derselbe, zur Darstellung des Dokuments verwendete Zeichensatz ergeben sollte:

Z1

aus Untersuchung des Dokumentanfangs geschlossener, vermuteter Zeichensatz

Z2

externe Angabe des Zeichensatzes als Dateiattribut bzw. Angaben im Programm

Z3

Zeichensatz-Deklaration im XML-Dokument

Um die Notwendigkeit manueller Eingriffe vor der Verarbeitung eines XML-Dokuments weitestgehend zu vermeiden, akzeptiert das COBOL-System in gewissem Umfang auch fehlende bzw. widersprüchliche Angaben zu Zeichensätzen aus diesen drei Quellen.

Die Entscheidung für den letztlich zur Verarbeitung angenommenen Zeichensatz bzw. die Entscheidung für einen Ein-/Ausgabezustand bei nicht auflösbaren Widersprüchen erfolgt entsprechend der folgenden Tabelle. Ein Gedankenstrich (–) bedeutet, dass die Existenz bzw. Verträglichkeit für die Entscheidung keine Bedeutung hat.

Vorgefundene Situation

Getroffene Entscheidung

Z1
erkannt
*

Z2
existiert
**

Z3
existiert
**

Z2
verträglich
mit Z1 ***

Z3
verträglich
mit Z1 ***

Z3
verträglich
mit Z2 ***

verwendeter
Zeichensatz

Ein-/Ausgabe-
Zustand

ja

ja

ja

ja

-

ja

Z3

-

ja

ja

ja

ja

-

nein

Z2

-

ja

ja

ja

nein

ja

--

3D

ja

ja

ja

nein

nein

--

3D

ja

ja

nein

ja

--

Z2

-

ja

ja

nein

nein

---

3D

ja

nein

ja

-

ja

-

Z3

-

ja

nein

ja

-

nein

-

Z1

-

ja

nein

nein

---

Z1

-

nein

ja

----

Dokument in
Datei: Z2

Dokument im
Speicher: 3D

nein

nein

-----

3D

-

unbekannter
Zeichensatz

-----

3D

--

unbekannter
Zeichensatz

----

3D

*

Als Zeichensatz Z1 kann nur UTF-16, EBCDIC oder UTF erkannt werden. Dabei steht EBCDIC als (unpräzise) Obermenge für alle speziellen Varianten (wie z.B. EDF03IRV, EDF041 usw.) und UTF als (unpräzise) Obermenge für UTF-8 und alle von XHCS unterstützten ISO-Varianten.

**

Als Z2 für Dokumente in Dateien und als Z3 werden nur UTF-8, UTF-16, EBCDIC, ISO646, sowie die speziellen EBCDIC-Varianten bzw. ISO-Varianten unter dem Begriff 'existiert' verstanden, d.h. alle, die auch XHCS kennt. Alle anderen Zeichensätze werden als 'unbekannt' angesehen. Als Z2 für Dokumente im Speicher sind nur EBCDIC (für alphanumerische Datenfelder) und UTF-16 (für nationale Datenfelder) möglich.

***

’Zeichensatz Zx verträglich mit Zeichensatz Zy' bedeutet, dass Zx und Zy den gleichen Zeichensatz bezeichnen, oder Zx ein genauer bezeichneter Zeichensatz aus der (unpräzisen) Obermenge Zy ist.

Wenn der letztlich ausgewählte Zeichensatz nur die unpräzise Obermenge EBCDIC bezeichnet, wird die zur Übersetzungszeit des Programms gültige spezielle Variante verwendet.

Wenn der letztlich ausgewählte Zeichensatz nur die unpräzise Obermenge UTF bezeichnet, wird UTF-8 verwendet.

Diese Zeichensatzerkennung erfolgt bei jeder OPEN DOCUMENT-Anweisung (ohne AT-Angabe) und während einer XML PARSE-Anweisung sowohl für das primäre XML-Dokument, als auch für die darin angesprochenen externen Entitäten bzw. DTDs.