Eine Zeichenkodierung ordnet Zeichen (Buchstaben, Ziffern, Symbole) eindeutig Bitmustern beziehungsweise Bytefolgen zu. Erst durch die Kodierung kann Text als Bytefolge gespeichert, übertragen und verarbeitet werden — die Grundlage jeder Textverarbeitung und der Maschinensprache-nahen Datenhaltung.
Von ASCII zu Unicode
- ASCII (1963): 7 Bit, 128 Zeichen inklusive Steuerzeichen; 95 druckbare Zeichen.
A= 0x41,a= 0x61,0= 0x30. - ISO 8859-1 (Latin-1): 8 Bit, 256 Zeichen — erweitert ASCII um westeuropäische Sonderzeichen wie ä, ö, ü und ß.
- Unicode: Ein universeller Zeichensatz mit über einer Million Codepoints (U+0000 bis U+10FFFF, Version 16 aus dem Jahr 2024). Unicode ist ein Zeichensatz, keine Kodierung — die Zuordnung zu Bytes übernehmen UTF-8, UTF-16 oder UTF-32.
UTF-8: der Web-Standard
UTF-8 wurde 1992 von Ken Thompson und Rob Pike entwickelt und ist die dominierende Kodierung im Web (RFC 3629). Es ist ASCII-kompatibel und variabel lang:
- 1 Byte: U+0000–U+007F — identisch zu ASCII
- 2 Bytes: U+0080–U+07FF — Muster
110xxxxx 10xxxxxx - 3 Bytes: U+0800–U+FFFF — hier liegen die deutschen Umlaute (
ä= U+00E4 =C3 A4) - 4 Bytes: U+10000–U+10FFFF — z.B. Emojis
UTF-16 verwendet 2 oder 4 Bytes pro Zeichen (intern in Windows, Java und der JavaScript-Engine), UTF-32 immer 4 Bytes. Ein optionales BOM (Byte Order Mark) kennzeichnet Kodierung und Byte-Reihenfolge — bei UTF-8 als EF BB BF, bei UTF-16 als FF FE bzw. FE FF.
Praxis und Fallstricke
Im Web wird die Kodierung per <meta charset="utf-8"> gesetzt; Datenbanken wie MySQL benötigen für echtes UTF-8 inklusive Emojis den Zeichensatz utf8mb4 (das ältere utf8 erlaubt nur maximal 3 Byte pro Zeichen). In Python unterscheidet man str (Unicode) von bytes (kodierte Folge) und konvertiert explizit. Wird eine UTF-8-Datei fälschlich als Latin-1 gelesen, entstehen Mojibake — scheinbar kaputte Umlaute. Die korrekte Kodierung ist auch für den Compiler wichtig: Der Lexer liest den Quelltext als Zeichenstrom und erzeugt daraus die Tokens, die der Parser weiterverarbeitet.