UTF-8

Kodierung von Unicode mit variabler Byteanzahl
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 13. April 2004 um 14:48 Uhr durch RokerHRO (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

UTF-8 (Abk. für 8-bit Unicode Transformation Format) ist eine Kodierung für Unicode-Zeichen; dabei wird jedem Unicode-Zeichen eine speziell kodierte Byte-Ketten von variabler Länge zugeordnet.

UTF-8 ist gegenwärtig als RFC 3629 standardisiert. RFC 2279 ist veraltet (UTF-8, a transformation format of ISO 10646).

Unicode-Zeichen mit mit den Werten zwischen 0 und 127 (0 .. 7F hexadezimal) werden in der UTF-8-Kodierung als ein Byte mit dem gleichen Wert wiedergegeben. Insofern sind alle Daten, die ausschließlich ASCII-Zeichen verwenden, in beiden Darstellungen identisch.

Für Unicode-Zeichen größer als 127 werden in der UTF-8-Kodierung zu Byteketten der Länge zwei bis vier.


Unicode-Bereich UTF-8 Kodierung Bemerkungen
U0000 - U007F 0xxxxxxx In diesem Bereich entspricht UTF-8 genau dem ASCII-Code: Das erste Bit ist 0, die darauf folgende 7-Bitkombination ist das ASCII-Zeichen.
U0080 - U07FF 110xxxxx 10xxxxxx Das erste Byte beginnt mit binär 11, die folgenden Bytes beginnen mit binär 10; die x stehen für die fortlaufende Bitkombination des Unicodezeichens. Die Anzahl der Einsen bis zur ersten 0 im ersten Byte ist die Anzahl der Bytes für das Zeichen.
U0800 - UFFFF 1110xxxx 10xxxxxx 10xxxxxx
U10000 - U10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Theoretisch ließe sich das Schema fortsetzen, die aktuelle RFC beschränkt die Zeichen jedoch auf die durch UTF-16 erreichbaren, also bis U10FFFF.

Betrachtet man die Bitfolgen etwas genauer, erkennt man die große Sinnfälligkeit von UTF-8:

  • Ist das erste Bit 0, handelt es sich um ein gewöhnliches ASCII-Zeichen, da ASCII eine 7-Bit-Kodierung ist und die ersten 128 Zeichen des Unicode die ASCII-Zeichen sind. Damit sind alle ASCII-Dokumente automatisch aufwärtskompatibel zu UTF-8.
  • Ist das erste Bit 1, handelt es sich um ein Mehrbytezeichen, also ein Unicode-Zeichen mit einer Zeichennummer größer als 127.
  • Sind die ersten beiden Bits 11, handelt es sich um das Start-Byte eines Mehrbytezeichens, sind sie 10, um ein Folge-Byte.
  • Die Anzahl der 1-Bits vor dem ersten 0-Bit bei Start-Bytes entspricht der Anzahl an Bytes des Mehrbytezeichens insgesamt, oder anders interpretiert, die Anzahl der 1-Bits nach dem ersten Bit vor dem ersten 0-Bit der Anzahl an Folgebytes.

Somit kann ein Byte-Strom auch in der Mitte gelesen werden, ohne dass es Probleme mit der Dekodierung gibt.

Zu beachten:

  • Das gleiche Zeichen kann auf verschiedene Weise kodiert werden. Jedoch ist nur die jeweils kürzeste mögliche Kodierung erlaubt.
  • Kodierungen mit mehr als 4 Oktetts sind ausgeschlossen worden, da es in Unicode und ISO 10646 keine korrespondierenden Zeichen gibt.


Siehe auch: UTF-16, UTF-32

  • http://www.cl.cam.ac.uk/~mgk25/unicode.html -- Markus Kuhn, The UTF-8 and Unicode FAQ for Unix/Linux; in diesem Dokument findet man Hinweise, wie UTF-8 ASCII und ISO 8859-1 in der GNU/Linux- und Unix-Welt ersetzen kann.