UTF-8
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-Kette von variabler Länge zugeordnet.
UTF-8 ist gegenwärtig als RFC www.ietf.org/rfc/rfc3629.txt 3629 standardisiert (UTF-8, a transformation format of ISO 10646). Dieser Standard löst das ältere RFC www.faqs.org/rfcs/rfc2279.html 2279 ab.
Unicode-Zeichen 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 echte ASCII-Zeichen verwenden, in beiden Darstellungen identisch.
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 (128 Zeichen) 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.
- Die lexikalische Ordnung nach Byte-Werten entspricht der lexikalischen Ordnung nach Buchstaben-Nummern, da größere Zeichennummern mit entsprechend mehr 1-Bits am Anfang kodiert werden.
Zu beachten:
- Das gleiche Zeichen kann auf verschiedene Weise kodiert werden. Jedoch ist nur die jeweils kürzeste mögliche Kodierung erlaubt.
- Ursprünglich gab es auch Kodierungen mit mehr als 4 Oktetts (bis zu 6), diese sind jedoch ausgeschlossen worden, da es in Unicode keine korrespondierenden Zeichen gibt und ISO 10646 in seinem möglichen Zeichenumfang an Unicode angeglichen wurde.
Siehe auch: UTF-7, UTF-16, UTF-32, Unicode
- cl.cam.ac.uk/~mgk25/unicode.html 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.
- ietf.org/rfc/rfc3629.txt www.ietf.org/rfc/rfc3629.txt -- RFC 3629: UTF-8, a transformation format of ISO 10646
- cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt -- Einige Anmerkungen von Rob Pike zur Geschichte von UTF-8
- columbia.edu/kermit/utf8.html www.columbia.edu/kermit/utf8.html - UTF-8 Beispiel
Der Ursprungsartikel stammt von der deutschsprachigen Wiki pedia (siehe oben: "Original Artikel & Autoren Liste"). Der Text steht unter der GNU Freie Dokumentation Lizenz. |