Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier. UTF-8 (Abk. für 8-bit Unicode Transformation Format ) ist eine Kodierung für Unicode -Zeichen; dabei wird jedem Unicode-Zeichen eine speziell 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 den Werten zwischen 0 127 (0 .. 7F hexadezimal) werden in UTF-8-Kodierung als ein Byte mit dem gleichen wiedergegeben. Insofern sind alle Daten die ausschließlich verwenden in beiden Darstellungen identisch.
Für Unicode-Zeichen größer als 127 werden der UTF-8-Kodierung zu Byteketten der Länge zwei vier.
Unicode-Bereich
UTF-8 Kodierung
Bemerkungen
U0000 - U007F
0xxxxxxx
In diesem Bereich entspricht UTF-8 genau ASCII-Code: Das erste Bit ist 0 die darauf folgende 7-Bitkombination ist das
U0080 - U07FF
110xxxxx 10xxxxxx
Das erste Byte beginnt mit binär die folgenden Bytes beginnen mit binär 10; x stehen für die fortlaufende Bitkombination des Die Anzahl der Einsen bis zur ersten im ersten Byte ist die Anzahl der für das Zeichen.
U0800 - UFFFF
1110xxxx 10xxxxxx 10xxxxxx
U10000 - U10FFFF
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Theoretisch ließe sich das Schema fortsetzen aktuelle RFC beschränkt die Zeichen jedoch auf durch UTF-16 erreichbaren also bis U10FFFF.
Betrachtet man die Bitfolgen etwas genauer man die große Sinnfälligkeit von UTF-8:
Ist das erste Bit 0 handelt sich um ein gewöhnliches ASCII-Zeichen da ASCII 7-Bit-Kodierung ist und die ersten 128 Zeichen Unicode die ASCII-Zeichen sind. Damit sind alle automatisch aufwärtskompatibel zu UTF-8.
Ist das erste Bit 1 handelt sich um ein Mehrbytezeichen also ein Unicode-Zeichen einer Zeichennummer größer als 127.
Sind die ersten beiden Bits 11 es sich um das Start-Byte eines Mehrbytezeichens sie 10 um ein Folge-Byte.
Die Anzahl der 1-Bits vor dem 0-Bit bei Start-Bytes entspricht der Anzahl an des Mehrbytezeichens insgesamt oder anders interpretiert die der 1-Bits nach dem ersten Bit vor ersten 0-Bit der Anzahl an Folgebytes.
Somit kann ein Byte-Strom auch in Mitte gelesen werden ohne dass es Probleme der Dekodierung gibt.
Zu beachten:
Das gleiche Zeichen kann auf verschiedene kodiert werden. Jedoch ist nur die jeweils mögliche Kodierung erlaubt.
Ursprünglich gab es auch Kodierungen mit als 4 Oktetts (bis zu 6) diese sind jedoch worden da es in Unicode keine korrespondierenden Zeichen gibt und ISO 10646 in seinem möglichen Zeichenumfang an Unicode wurde.
In Dateien die von der JVM im UTF-8-Format geschrieben werden wird 0 regelwidrig 2-Zeichen-Sequenz kodiert. So wird das Problem vermieden ein 0 in einem String als Terminal-Zeichen Strings interpretiert wird.
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 UTF-8 ASCII und ISO 8859-1 in der und Unix-Welt ersetzen kann.