Was ist Unicode-Kodierung? Codepunkte, UTF-8 und UTF-16 erklärt

16 Jun 2026 844 words

Was ist Unicode-Kodierung?

Unicode ist ein universeller Zeichenkodierungsstandard, der jedem Zeichen, das in menschlichen Sprachen verwendet wird, eine eindeutige Nummer – einen sogenannten Codepunkt – zuweist. Vor Unicode gab es Dutzende inkompatibler Kodierungssysteme. Ein auf Russisch in einem System verfasstes Dokument war auf einem anderen nicht lesbar. Unicode löst dies, indem es einen einzigen, vereinheitlichten Zeichensatz bereitstellt, der über 150 Schriften und 140.000 Zeichen abdeckt.

Unicode selbst ist keine Kodierung. Es ist ein Zeichenrepertoire. Die Kodierungsebene – wie Codepunkte als Bytes gespeichert werden – wird von Kodierungsformen wie UTF-8, UTF-16 und UTF-32 übernommen. Das Verständnis des Unterschieds zwischen einem Codepunkt und seiner Byte-Darstellung ist der Schlüssel zur Vermeidung von Kodierungsfehlern.

Codepunkte

Jedes Unicode-Zeichen hat einen Codepunkt, der als U+ gefolgt von einer hexadezimalen Zahl geschrieben wird. Der Buchstabe A ist U+0041, das Eurozeichen ist U+20AC, und das Emoji 😀 ist U+1F600.

Codepunkte sind in 17 Ebenen organisiert, die jeweils 65.536 Zeichen enthalten. Die erste Ebene (Ebene 0) ist die Basis-Mehrsprachige Ebene (BMP), die die gebräuchlichsten Zeichen enthält, darunter Lateinisch, Griechisch, Kyrillisch, CJK und viele andere. Die Ebenen 1 bis 16 enthalten zusätzliche Zeichen wie Emojis, historische Schriften und seltene CJK-Zeichen.

Ebene Bereich Name
0 U+0000 bis U+FFFF Basis-Mehrsprachige Ebene (BMP)
1 U+10000 bis U+1FFFF Ergänzende Mehrsprachige Ebene (SMP)
2 U+20000 bis U+2FFFF Ergänzende Ideografische Ebene (SIP)
3-13 U+30000 bis U+DFFFF Nicht zugewiesen
14 U+E0000 bis U+EFFFF Ergänzende Spezialzweck-Ebene (SSP)
15-16 U+F0000 bis U+10FFFF Privatnutzungs-Ebenen

UTF-8, UTF-16, UTF-32

Diese drei Kodierungsformen unterscheiden sich darin, wie sie Codepunkte auf Bytes abbilden.

UTF-8

UTF-8 ist die dominierende Kodierung im Web. Es verwendet 1 bis 4 Bytes pro Zeichen und ist abwärtskompatibel mit ASCII. Zeichen im ASCII-Bereich (U+0000 bis U+007F) verwenden ein Byte. Europäische Schriften verwenden zwei Bytes. CJK-Zeichen und Emojis verwenden drei oder vier Bytes.

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

UTF-8-Vorteile:

  • ASCII-Text ist gültiges UTF-8 (keine Konvertierung erforderlich)
  • Selbstsynchronisierend: Zeichengrenzen sind immer auffindbar
  • Keine Byte-Reihenfolge-Probleme (Little-Endian / Big-Endian)
  • Platzsparendste Kodierung für lateinische Schrift

UTF-16

UTF-16 verwendet 2 Bytes (eine Code-Einheit) für BMP-Zeichen und 4 Bytes (zwei Code-Einheiten, sogenannte Surrogatpaare) für zusätzliche Zeichen. Windows, Java und JavaScript verwenden intern UTF-16.

UTF-16 hat Probleme mit der Byte-Reihenfolge. Eine UTF-16-Datei muss angeben, ob sie Little-Endian (UTF-16LE) oder Big-Endian (UTF-16BE) ist, typischerweise unter Verwendung eines BOM (Byte Order Mark) am Anfang.

UTF-32

UTF-32 verwendet genau 4 Bytes für jeden Codepunkt. Es ist einfach, aber verschwenderisch. Eine rein ASCII-Datei wird viermal größer. UTF-32 wird in der Praxis selten verwendet.

Vergleich

Merkmal UTF-8 UTF-16 UTF-32
Bytes pro Zeichen 1-4 2 oder 4 4
ASCII-Kompatibilität Ja Nein Nein
Web-Nutzung ~98 % ~2 % <0,01 %
BOM erforderlich Nein Ja Ja
Verbreitet in Web, Linux, JSON Windows, Java, JS Interne Verarbeitung

Kodierungsfehler

Der häufigste Kodierungsfehler ist die Behandlung von Bytes als Zeichen. Wenn Sie eine UTF-8-Zeichenkette nehmen und als Latin-1 (ISO 8859-1) interpretieren, erscheinen akzentuierte Zeichen als verstümmelte Symbole. Dies passiert, wenn die Kodierung nicht deklariert ist oder wenn ein Tool die falsche Kodierung annimmt.

Ein weiteres häufiges Problem ist das Zählen von Bytes anstatt von Zeichen. In UTF-8 ist die Zeichenkette "café" 4 Zeichen, aber 5 Bytes, weil é zwei Bytes verwendet. Funktionen wie PHPs strlen zählen standardmäßig Bytes, während mb_strlen Zeichen zählt.

Programmierbeispiele

// PHP - immer mb_*-Funktionen für UTF-8 verwenden
$text = 'café ☕';
echo strlen($text);      // 8 Bytes (falsche Zählung)
echo mb_strlen($text, 'UTF-8');  // 6 Zeichen

// Unicode-Codepunkte kodieren/dekodieren
echo mb_convert_encoding($text, 'UTF-16', 'UTF-8');
# Python 3 - Zeichenketten sind standardmäßig Unicode
text = 'café ☕'
print(len(text))         # 6 Zeichen
bytes_utf8 = text.encode('utf-8')
bytes_utf16 = text.encode('utf-16')
print(bytes_utf8)        # b'caf\xc3\xa9 \xe2\x98\x95'
// JavaScript - Zeichenketten sind intern UTF-16
let text = 'café ☕';
console.log(text.length);     // 6 (aber Emoji kann als 2 zählen)

// Als UTF-8-Bytes kodieren
let encoder = new TextEncoder();
let bytes = encoder.encode(text);
console.log(bytes);  // Uint8Array(8)

Online-Tool

Der Unicode Encoder & Decoder auf Help2Code konvertiert Text in Unicode-Codepunkte und zwischen UTF-8-, UTF-16- und UTF-32-Darstellungen. Er ist nützlich zum Debuggen von Kodierungsproblemen und zum Lernen, wie Unicode funktioniert.

Fazit

Unicode-Kodierung ist essentielles Wissen für jeden Entwickler, der mit internationalem Text arbeitet. UTF-8 ist der Standard für das Web und sollte Ihre Standardeinstellung sein. Das Verständnis des Unterschieds zwischen Codepunkten und Byte-Darstellungen hilft Ihnen, die häufigsten Textkodierungsfehler zu vermeiden. Verwenden Sie den Unicode Encoder & Decoder, um mit Kodierungen zu experimentieren und Kodierungsprobleme zu debuggen.


About this article

Erfahren Sie, was Unicode-Kodierung ist, wie Codepunkte funktionieren und die Unterschiede zwischen UTF-8, UTF-16 und UTF-32.


Related Articles


Related Tools

Help2Code Logo
Menu