GEDCOM/CHAR-Tag
Name und Bedeutung
Tag
CHAR
Formelle Bezeichnung
CHAR
Deutsche Bezeichnung
CHAR steht für Character-set, auf Deutsch: Zeichensatz.
Verwendung
Über das tag CHAR soll die Kodierung der in der GEDCOM Datei benutzten Buchstaben und Zeichen festgelegt werden.
Formale Beschreibung zulässiger Werte
Basis
Basis dieser Beschreibung: GEDCOM Standard Draft 5.5.1
Der Standard erlaubt die Verwendung folgender Kodierungen:
- 8-Bit ANSEL
- ASCII (USA Version)
- UNICODE
- UTF-8
Standardfall
Jede GEDCOM Datei soll im Header Angaben zur benutzten Kodierung geben. Das Format ist wie folgt:
1 CHAR <Zeichensatzkodierung>
Beispiel:
1 CHAR UTF-8
! Achtung: Es sind nur folgende Kodierungen erlaubt.
<Zeichensatzkodierung> := ANSEL |UTF-8 | UNICODE | ASCII
Optionale Angaben
Über eine dem tag CHAR direkt untergeordnetes
2 VERS Zeichensatzkodierung-Versionsangabe
kann die verwendete Version des in CHAR angegebenen Zeichensatzes näher spezifiziert werden.
Entscheidungsvorschlag zu CHAR
Dieser Entscheidungsvorschlag ist auf Basis der Diskussion in der Liste Gedcom-L erarbeitet worden. Die Punkte sind gegliedert und mit Punktkennzeichnungen wie E1, E2, ..., I1, ... bezeichnet, damit in der Diskussion leichter darauf verwiesen werden kann.
Der Vorschlag ist durch weitere Beiträge der Liste insbesondere zu den Punkten E3 und I2 modifiziert worden, er steht weiter zur Diskussion. Er kann abgeändert oder durch Alternativvorschläge ergänzt werden. Nach der Diskussion soll es dann über eine Abstimmung zu einer Vereinbarung zu diesem Umfang kommen.
Vorschläge zu Vereinbarungen zu CHAR bezüglich Export
- E1 Angabe der Kodierung
- Die in der Datei verwendete Kodierung muss im Kopf ("Header") der Datei explizit angegeben werden in der Form:
- 1 CHAR Zeichensatzkodierung
- E2 Standard-Kodierung
- Der Export in der Kodierung UTF-8 muss unterstützt werden, diese Kodierung sollte als Standard-Kodierung eingestellt werden.
- E3 Optionale Kodierungen
- Weitere, im GEDCOM-Standard 5.5.1 aufgeführte Kodierungen dürfen optional unterstützt werden: ANSEL, ASCII, UCS-2 BE, UCS-2 LE, UTF-16 BE, UTF-16 LE. Die Verwendung der Kodierungen UCS-2 und UTF-16 wird nicht empfohlen.
- E4 Duldung ANSI
- Die Unterstützung der ANSI Kodierung wird geduldet, d.h. sie darf als Option unterstützt werden, obwohl ANSI nach GEDCOM Standard 5.5.1 nicht zulässig ist.
- E5 Warnung bei unvollständigem Export
- Wählt der Anwender beim Export eine Kodierung, die nicht alle in der aktuellen Datei vorkommenden Zeichen unterstützt, so sollte das Programm eine Warnung ausgeben.
- E6 Position CHAR im Header
- CHAR sollte im Header so weit nach oben gestellt werden, dass vor dem tag CHAR keine Zeichen ausserhalb des US_ASCII Umfanges auftreten.
Vorschläge zu Vereinbarungen zu CHAR bezüglich Import
- I1 Unterstützung von Kodierungen
- Beim Import müssen die Kodierungen UTF-8 und ANSEL unterstützt werden.
- I2 Unterstützung weiterer Kodierungen
- Weitere Kodierungen dürfen beim Import ohne Einschränkung unterstützt werden, die Unterstützung der Kodierungen aus E3 wird empfohlen.
- I3 Duldung und Unterstützung ANSI
- Die Kodierung ANSI darf unterstützt werden. Für eine Übergangszeit muss der Import von ANSI-kodierten Dateien unterstützt werden.
- I4 Erkennung der Kodierung
- Die Kodierung muss automatisch vom Programm erkannt werden, wenn sie nach E1 oder B1 korrekt angegeben ist.
- I5 Warnmeldung bei unvollständigem Import
- Kann eine importierte Datei aufgrund ihrer Kodierungen intern nicht vollständig verarbeitet werden, so sollte dem Nutzer eine Warnmeldung gegeben werden.
Kennzeichnung durch Byte Order Mark (BOM)
- B1 BOM beim Export
- Das Byte Order Mark (BOM) muss bei UNICODE-Kodierungen ( UTF-8, USC-2, UTF-16 ) ausgegeben werden.
Alternativvorschlag:
- B1 -A- BOM beim Export
- Das Byte Order Mark (BOM) darf beim Export ausgegeben werden.
- B2 BOM beim Import
- Über Erkennungsroutinen muss eine automatische Erkennung sichergestellt werden, ob ein BOM in der einzulesenden Datei vorhanden ist, und wenn ja, welches BOM.
Behandlung/Darstellung schwieriger Situationen
Folgende Themen sind derzeit in der GEDCOM-Arbeitsgruppe von Compgen mit den Programmentwicklern in Diskussion:
Kodierung "UNICODE" im GEDCOM Standard 5.5.1
Der GEDCOM Standard 5.5.1 ist nicht eindeutig in der Aussage, was bei der Angabe von Zeichensatzkodierungen mit "UNICODE" gemeint ist. Vieles spricht für die Interpretation, es sei UCS-2. Mit UNICODE 2.0 wurde die Kodierung UTF-16 als Nachfolger von UCS-2 eingeführt. Zu UTF-16 fehlen jedoch im GEDCOM-Standard 5.5.1 konkrete Aussagen.
Um bei der Vereinbarung unter den Programmautoren hier diese Unsicherheit nicht fortbestehen zu lassen, wurden im Punkt Export E3 explizit sowohl die UCS-2 als auch die UTF-16 Kodierungen aufgeführt.
Da jedoch mit UTF-8 eine gut unterstützte Kodierung zur Verfügung steht, die den vollen Zeichensatzumfang wie UTF-16 auch abbildet, haben die in der Liste Gedcom-L vertretenen Programmautoren sich in ihrer Disksussion darauf verständigt, bevorzugt UTF-8 als Kodierung zu unterstützen.
Ein sicherer Datentransfer über UCS-2 und insbesondere über UTF-16 bedarf weiterer Vereinbarungen, die hier nicht ausgearbeitet wurden.
Standard Kodierung beim Export
Folgende GEDCOM 5.5.1 konforme Optionen stehen zur Auswahl:
- UTF-8
- Erlaubt die unproblematische Darstellung von internationalen Zeichen
- Wird von einigen Programmen nicht unterstützt
- ASCII
- Zu limitierter Zeichensatz
- ANSEL
- Gute Unterstützung von internationalen Zeichen
- Kaum benutzt und geringe Verbreitung
- UNICODE
- Entspricht UCS-2 (oder UTF-16, siehe oben).
- Gute Unterstützung von internationalen Zeichen
- UTF-16 gleicher Umfang wie UTF-8, die Einschränkungen bei UCS-2 sind für die Genealogie nicht relevant
- Wird von wenigen Programmen unterstützt, offene Probleme für die Umsetzung
Bemerkung: ANSI ist zwar nicht GEDCOM 5.5.1 konform, ist aber heute weitverbreitet und wird von vielen Genealogieprogrammen als das Standardformat eingesetzt. Es bestehen Probleme, wenn die Codepage nicht eindeutig oder richtig mit angegeben wird.
Status:
Entscheidungsvorschlag formuliert
Benutzung der Byte Order Mark (BOM) bei UNICODE Kodierungen
Mit dem BOM wird zu Beginn der Datei angegeben, in welcher Ordnung die Bytes bei UTF-16 zu lesen sind. Für UTF-8 ist ebenfalls ein BOM definiert.
Folgende Argumente werden zur Zeit in der Arbeitsgruppe der Programmautoren abgewogen:
- Durch die Angabe des BOM wird die Identifizierung der gewählten Kodierung erleichtert
- Ältere Programme verstehen z.T. Dateien mit BOM nicht und brechen den Import ab
Status:
Entscheidungsvorschlag formuliert
Interpretation der ersten beiden Bytes einer GEDCOM-Datei
Eine GEDCOM-Datei beginnt mit der Zeile
- 0 HEAD
Je nach Kodierung und Verwendung eines BOM finden sich folgende Angaben in den ersten beiden Bytes der GEDCOM-Datei:
Bytes | Bedeutung |
---|---|
|
Kein BOM, Kodierung ASCII, ANSI oder UTF-8 BOM für UTF-8 ( vollständiges BOM: BOM für UTF-16 BE BOM für UTF-16 LE Kein BOM, Kodierung UTF-16 BE Kein BOM, Kodierung UTF-16 LE |
Damit bietet die Auswertung der ersten beiden Bytes einer Datei die Möglichkeit, eine UTF-16 Kodierung eindeutig zu erkennen. Eine UTF-8 Kodierung wird nur erkannt, wenn das UTF-8 BOM angegeben wurde.
Ermittlung der Kodierung bei Beginn der Datei mit 0x30 0x20
Eine Datei mit dem Inhalt 0x30 0x20 in den ersten Bytes muss weiter analysiert werden, ob sie in ASCII, ANSI oder UTF-8 Kodierung erstellt wird. Dies erfolgt in der Regel dann über
- 1 CHAR Zeichensatzkodierung
Da sich die Kodierungen ASCII, ANSI und UTF-8 nicht unterscheiden für Zeichen des US_ASCII Umfanges, kann durch eine entsprechend frühe Position von 1 CHAR ... im Header sichergestellt werden, dass zunächst die Kodierung eingelesen wird, und dann erst Zeichen folgen, bei denen sich die Kodierungen und damit die Dekodierungen unterscheiden.
Versionsangaben bei UNICODE Kodierungen
Zu klären bleibt, ob eine Versionsangabe bei UNICODE nötig oder optional sein soll.
Status:
in Diskussion
Codepage bei ANSI Kodierung
Beim Export mit der Kodierung ANSI kann die verwendete Codepage mittels des tags VERS angegeben:
- 1 CHAR ANSI
- 2 VERS codepage
Mit
- 1 CHAR ANSI
- 2 VERS 1252
wird die Standard ANSI Codepage für westeuropäische Schriften beschrieben.