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:
Weblinks
- 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.
- http://www.ietf.org/rfc/rfc3629.txt -- RFC 3629: UTF-8, a transformation format of ISO 10646
- http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt -- Einige Anmerkungen von Rob Pike zur Geschichte von UTF-8