Zum Hauptinhalt springen

RFC 3629 - UTF-8, ein Transformationsformat von ISO 10646

Veröffentlichungsdatum: November 2003
Status: Internetstandard (STD 63)
Autor: F. Yergeau (Alis Technologies)
Ersetzt: RFC 2279
Kategorie: Standards Track


Zusammenfassung (Abstract)

ISO/IEC 10646-1 definiert einen großen Zeichensatz namens Universal Character Set (UCS), der die meisten Schriftsysteme der Welt umfasst. Die ursprünglich vorgeschlagenen Kodierungen des UCS waren jedoch nicht mit vielen aktuellen Anwendungen und Protokollen kompatibel, was zur Entwicklung von UTF-8, dem Gegenstand dieses Memos, geführt hat. UTF-8 hat die Eigenschaft, den vollständigen US-ASCII-Bereich zu bewahren und damit Kompatibilität mit Dateisystemen, Parsern und anderer Software zu bieten, die auf US-ASCII-Werte angewiesen ist, aber für andere Werte transparent ist. Dieses Memo macht RFC 2279 obsolet und ersetzt es.


Status dieses Memos (Status of this Memo)

Dieses Dokument spezifiziert ein Internet Standards Track-Protokoll für die Internet-Community und bittet um Diskussion und Verbesserungsvorschläge. Bitte beziehen Sie sich auf die aktuelle Ausgabe der „Internet Official Protocol Standards" (STD 1) für den Standardisierungsstatus und Status dieses Protokolls. Die Verteilung dieses Memos ist unbegrenzt.


Copyright (C) The Internet Society (2003). Alle Rechte vorbehalten.


Inhaltsverzeichnis (Table of Contents)

Hauptabschnitte


Warum UTF-8 wichtig ist

UTF-8 ist die Standard-Zeichenkodierung für das moderne Internet. Fast alle modernen Webanwendungen, APIs und Datenformate verwenden UTF-8.

Hauptvorteile

MerkmalBeschreibungWichtigkeit
ASCII-kompatibelASCII-Zeichen werden identisch kodiert⭐⭐⭐⭐⭐
Keine Byte-Reihenfolge-ProblemeKeine Endianness-Probleme⭐⭐⭐⭐⭐
Selbst-synchronisierendKann von jeder Position dekodiert werden⭐⭐⭐⭐
Platzsparend1 Byte für Englisch, 3 Bytes für CJK⭐⭐⭐⭐
Globale UnterstützungUnterstützt alle Unicode-Zeichen⭐⭐⭐⭐⭐

UTF-8-Kodierungsregeln Schnellreferenz

Kodierungstabelle

Unicode-Bereich          Bytes  UTF-8-Byte-Muster
─────────────────────────────────────────────
U+0000 - U+007F 1 0xxxxxxx
U+0080 - U+07FF 2 110xxxxx 10xxxxxx
U+0800 - U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx
U+10000 - U+10FFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Zeichenbereichsabdeckung

1 Byte (ASCII):
- Lateinische Buchstaben, Zahlen, grundlegende Interpunktion
- Steuerzeichen
- Bereich: U+0000 - U+007F

2 Bytes:
- Erweiterte lateinische Zeichen
- Griechisch, Kyrillisch, Arabisch, Hebräisch
- Bereich: U+0080 - U+07FF

3 Bytes:
- CJK-Zeichen
- Die meisten anderen Schriftsysteme
- Bereich: U+0800 - U+FFFF

4 Bytes:
- Emoji-Symbole
- Historische Schriften, seltene Han-Zeichen
- Bereich: U+10000 - U+10FFFF

Kodierungsbeispiele

ASCII-Zeichen

Zeichen: 'A'
Unicode: U+0041
Binär: 0100 0001
UTF-8: 0x41
Bytes: 1

Kodierungsprozess:
U+0041 < U+007F → 1-Byte-Vorlage verwenden
0xxxxxxx → 01000001 → 0x41

Chinesisches Zeichen

Zeichen: '你'
Unicode: U+4F60
Binär: 0100 1111 0110 0000
UTF-8: 0xE4 0xBD 0xA0
Bytes: 3

Kodierungsprozess:
U+4F60 im Bereich U+0800-U+FFFF → 3-Byte-Vorlage verwenden
1110xxxx 10xxxxxx 10xxxxxx
↓ ↓ ↓
0100 111101 100000
↓ ↓ ↓
11100100 10111101 10100000
0xE4 0xBD 0xA0

Emoji-Zeichen

Zeichen: '😀'
Unicode: U+1F600
Binär: 0001 1111 0110 0000 0000 0000
UTF-8: 0xF0 0x9F 0x98 0x80
Bytes: 4

Kodierungsprozess:
U+1F600 im Bereich U+10000-U+10FFFF → 4-Byte-Vorlage verwenden
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
↓ ↓ ↓ ↓
000011 111101 100000 000000
↓ ↓ ↓ ↓
11110000 10011111 10011000 10000000
0xF0 0x9F 0x98 0x80

Einzigartige Eigenschaften von UTF-8

1. ASCII-Kompatibilität

ASCII-Datei = Gültige UTF-8-Datei

Beispiel:
Hello World (ASCII)
ist auch gültiges UTF-8

Grund:
ASCII verwendet 7 Bits (0xxxxxxx)
UTF-8s 1-Byte-Form ist ASCII

2. Selbst-Synchronisation

UTF-8-Byte-Strom:
... E4 BD A0 E5 A5 BD ...
你 好

Ab jeder Position starten:
- Erstes Byte (1110xxxx oder 110xxxxx oder 11110xxx) kennzeichnet Zeichenbeginn
- Folgebytes (10xxxxxx) werden nie mit einem ersten Byte verwechselt

Beispiel:
E4 BD A0 E5 A5 BD
↑ ↑
Kann als Folgebyte identifiziert werden
Kann ein neues Zeichen von hier identifizieren

3. Keine Byte-Reihenfolge-Probleme

UTF-16 benötigt BOM:
FE FF ... (Big Endian)
FF FE ... (Little Endian)

UTF-8 benötigt kein:
Feste Byte-Reihenfolge, von hoch nach niedrig
Kein BOM erforderlich zur Angabe der Byte-Reihenfolge


Wichtiger Hinweis: UTF-8 ist der Standardstandard für das moderne Internet. Verwenden Sie immer UTF-8-Kodierung und vermeiden Sie veraltete Kodierungen wie GBK, ISO-8859-1, Windows-1252 usw. Alle neuen Projekte sollten UTF-8 als einzige Zeichenkodierung verwenden.