1. Einleitung (Introduction)
ISO/IEC 10646 [ISO.10646] definiert einen großen Zeichensatz namens Universal Character Set (UCS), der die meisten Schriftsysteme der Welt umfasst. Derselbe Zeichensatz wird durch den Unicode-Standard [UNICODE] definiert, der zusätzlich weitere Zeicheneigenschaften und andere anwendungsbezogene Details definiert, die für Implementierer von großem Interesse sind. Bisher haben sich Unicode-Änderungen und Änderungen sowie Ergänzungen zu ISO/IEC 10646 gegenseitig verfolgt, sodass die Zeichenrepertoires und Codepunktzuweisungen synchron geblieben sind. Die beteiligten Normungsgremien haben sich verpflichtet, diese sehr nützliche Synchronisation aufrechtzuerhalten.
Kodierungsformen (Encoding Forms)
ISO/IEC 10646 und Unicode definieren mehrere Kodierungsformen ihres gemeinsamen Repertoires:
- UTF-8
- UCS-2
- UTF-16
- UCS-4
- UTF-32
In einer Kodierungsform wird jedes Zeichen als eine oder mehrere Kodierungseinheiten dargestellt. Alle Standard-UCS-Kodierungsformen außer UTF-8 haben eine Kodierungseinheit, die größer als ein Byte ist, was ihre Verwendung in vielen aktuellen Anwendungen und Protokollen erschwert, die 8- oder sogar 7-Bit-Zeichen annehmen.
UTF-8-Eigenschaften (UTF-8 Characteristics)
UTF-8, der Gegenstand dieses Memos, hat eine Kodierungseinheit von einem Byte. Es verwendet alle Bits eines Bytes, hat aber die Eigenschaft, den vollständigen US-ASCII-Bereich [US-ASCII] zu bewahren:
- US-ASCII-Zeichen werden in ein Byte mit dem normalen US-ASCII-Wert kodiert
- Jedes Byte mit einem solchen Wert kann nur ein US-ASCII-Zeichen darstellen und nichts anderes
UTF-8-Kodierungseigenschaften (UTF-8 Encoding Properties)
UTF-8 kodiert UCS-Zeichen als eine variable Anzahl von Bytes, wobei die Anzahl der Bytes und der Wert jedes einzelnen vom ganzzahligen Wert abhängen, der dem Zeichen in ISO/IEC 10646 zugewiesen ist (die Zeichennummer, auch als Code Position, Code Point oder Unicode Scalar Value bekannt).
Diese Kodierungsform hat die folgenden Eigenschaften (alle Werte sind hexadezimal):
✅ ASCII-Kompatibilität
Zeichennummern von U+0000 bis U+007F (US-ASCII-Repertoire) entsprechen den Bytes 00 bis 7F (7-Bit-US-ASCII-Werte). Eine direkte Folge ist, dass eine einfache ASCII-Zeichenkette auch eine gültige UTF-8-Zeichenkette ist.
✅ Keine ASCII-Verwechslung
US-ASCII-Byte-Werte erscheinen nicht anderweitig in einem UTF-8-kodierten Zeichenstrom. Dies bietet Kompatibilität mit Dateisystemen oder anderer Software (z. B. der printf()-Funktion in C-Bibliotheken), die basierend auf US-ASCII-Werten analysiert, aber für andere Werte transparent ist.
✅ Einfache Konvertierung
Die Hin- und Rückkonvertierung zwischen UTF-8 und anderen Kodierungsformen ist einfach.
✅ Längenanzeige
Das erste Byte einer Mehrbytesequenz zeigt die Anzahl der Bytes in der Sequenz an.
✅ Eingeschränkte Byte-Werte
Die Byte-Werte C0, C1, F5 bis FF erscheinen nie.
✅ Zeichengrenzen-Erkennung
Zeichengrenzen sind von überall in einem Byte-Strom leicht zu finden.
✅ Sortiererhaltung
Die lexikographische Sortierreihenfolge nach Byte-Wert von UTF-8-Zeichenketten ist dieselbe wie wenn sie nach Zeichennummern geordnet wären. Natürlich ist dies nur von begrenztem Interesse, da eine auf Zeichennummern basierende Sortierreihenfolge fast nie kulturell gültig ist.
✅ Schnelle Suchalgorithmen
Der Boyer-Moore-Schnellsuchalgorithmus kann mit UTF-8-Daten verwendet werden.
✅ Erkennbarkeit
UTF-8-Zeichenketten können durch einen einfachen Algorithmus ziemlich zuverlässig als solche erkannt werden, d. h. die Wahrscheinlichkeit, dass eine Zeichenkette in einer anderen Kodierung als gültiges UTF-8 erscheint, ist gering und nimmt mit zunehmender Zeichenkettenlänge ab.
UTF-8-Geschichte (UTF-8 History)
UTF-8 wurde im September 1992 von Ken Thompson entworfen, geleitet von spezifischen Designkriterien von Rob Pike, mit dem Ziel, ein UCS-Transformationsformat zu definieren, das im Plan9-Betriebssystem auf nicht störende Weise verwendet werden kann. Thompsons Design wurde durch die Standardisierung durch die X/Open Joint Internationalization Group XOJIG geleitet (siehe [FSS_UTF]) und trug dabei die Namen FSS-UTF (FSS/UTF-Variante), UTF-2 und schließlich UTF-8.
Verwandte Links
- Zurück zur RFC 3629 Startseite
- Weiter: 2. Notationskonventionen (Notational conventions)