UTF-8(7)

NAME
UTF-8 - eine ASCII-kompatible Unicode-Kodierung

BESCHREIBUNG
Der Unicode-Zeichensatz ist durch 16-Bit-Wörter definiert. Die einfachste Unicode-Kodierung (UCS-2) besteht aus einer Folge von 16-Bit-Zeichen. Solche Zeichenketten können 8-Bit-Bestandteile wie '\0' or '/' enthalten, die eine besondere Bedeutung z.B. in Dateinamen oder Bibliotheksfunktionen besitzen. Außerdem arbeiten die meisten UNIX-Programme mit ASCII-Dateien und können 16-Bit-Wörter nicht ohne größere Änderungen verarbeiten. Darum ist UCS-2 keine geeignete externe Kodierung von Unicode in Dateinamen, Text-Dateien, Environment-Variablen, etc. Das ISO 10646 Universal Character Set (UCS), eine Erweiterung von Unicode, wird sogar durch 31-Bit-Wörter definiert. Die einfache UCS-4-Kodierung (eine Folge von 32-Bit-Wörtern) leidet unter denselben Probleme wie die UCS-2-Kodierung. Die UTF-8-Kodierung von Unicode und UCS hat diese Probleme nicht und sollte deshalb für den Unicode-Zeichensatz unter unixoiden Betriebssystemen verwendet werden.

EIGENSCHAFTEN
Die UTF-8-Kodierung besitzt die folgenden Eigenschaften:

*   Die UCS-Zeichen 0x00000000 bis 0x0000007f (die klassischen in US-ASCII enthaltenen Zeichen) werden einfach als die Bytes 0x00 bis 0x7f kodiert. (Die stellt die ASCII-Kompatibilität sicher.) Das bedeutet, dass Dateien und Zeichenketten, die nur aus 7-Bit-Zeichen bestehen, unter ASCII und UTF-8 dieselbe Kodierung haben.

*   Alle UCS-Zeichen über 0x7f werden als Folge mehrerer Bytes im Bereich 0x80 bis 0xfd dargestellt, so dass kein ASCII-Byte als Teil eines anderen Zeichens auftritt und es keine Probleme z.B. mit '\0' oder '/' gibt.

*   Die lexikographische Sortierreihenfolge von UCS-4-Zeichenketten wird nicht beeinträchtigt.

*   Alle 2^31 UCS-Zeichen können mit UTF-8 kodiert werden.

*   Die Bytes 0xfe und 0xff werden nicht von der UTF-8-Kodierung benutzt.

*   Das erste Byte einer Folge mehrerer Bytes, die einen einzelnen nicht-ASCII-Zeichen darstellen, ist grundsätzlich im Bereich 0xc0 bis 0xfd und zeigt an, wie lang die Folge ist. Alle anderen Bytes der Folge sind im Bereich 0x80 bis 0xbf. Dadurch wird eine einfache Resynchronisation ermöglichst, da die Kodierung status-unabhängig und daher rebust gegenüber fehlenden oder verloren gegangenen Bytes ist.

*   UTF-8 kodierte UCS-Zeichen können bis zu sechs Bytes lang sein. Allerdings werden Unicode-Zeichen maximal drei Bytes lang. Da Linux nur den 16-Bit Unicode-Zeichensatz benutzt (und nicht den 31-Bit UCS-Zeichensatz), können UTF-8-Folgen unter Linux ein, zwei oder drei Bytes lang sein.

KODIERUNG
Die folgenden Byte-Folgen werden benutzt, um ein Zeichen darzustellen. Die zu benutzende Folge hängt vom UCS-Code des Zeichens ab:

0x00000000 - 0x0000007F:
    0xxxxxxx

0x00000080 - 0x000007FF:
    110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF:
    1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF:
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0x00200000 - 0x03FFFFFF:
    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFF:
    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Die xxx-Bits müssen durch den Code des Zeichens in Binärdarstellung ersetzt werden. Es wird die jeweils kürzeste Folge benutzt, die den Code des Zeichen darstellen kann.

BEISPIELE
Das Unicode-Zeichen 0xa9 = 1010 1001 (das Copyright-Zeichen) wird in UTF-8 als

    11000010 10101001 = 0xc2 0xa9

dargestellt und das Zeichen 0x2260 = 0010 0010 0110 0000 (das Ungleich-Symbol) als:

    11100010 10001001 10100000 = 0xe2 0x89 0xa0

KONFORM ZU
ISO 10646, Unicode 1.1, XPG4, Plan 9.

AUTOR
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
Deutsche Übersetzung: Sebastian Rittau <srittau@jroger.in-berlin.de>

SIEHE AUCH
unicode(7)