Zeichenkodierung
Eine Zeichenkodierung legt fest, wie Textzeichen oder Codepunkte als Bytefolgen dargestellt und wieder dekodiert werden.
Definition
Eine Zeichenkodierung bestimmt, wie Texteinheiten für Speicherung und Übertragung in Zahlen oder Bytes umgewandelt und zurückdekodiert werden. Sender und Empfänger müssen dieselbe Kodierung verwenden.
ASCII, UTF-8, UTF-16 und ältere Codepages sind Zeichenkodierungen oder Kodierungsschemata. Unicode definiert Repertoire und Codepunkte; UTF-8 und UTF-16 deren konkrete Darstellung.
Funktionsweise
Ein Encoder ordnet Zeichen gültige Bytefolgen zu, der Decoder wendet die Umkehrregeln an. In UTF-8 ist A das Byte 41, € dagegen E2 82 AC. Kodierungen variabler Länge verwenden unterschiedlich viele Bytes.
HTTP-Charset, Dateideklaration oder Protokollvereinbarung nennen den richtigen Decoder. Ohne Kontext können dieselben Bytes verschiedenen Text ergeben.
Praktisches Beispiel
Als UTF-8 dekodiert ergeben die Bytes E2 82 AC das Zeichen €. Mit einer unpassenden Einbyte-Kodierung entstehen andere Zeichen; diese sichtbare Beschädigung heißt oft Mojibake.
Eine Konvertierung dekodiert zuerst die Quellbytes korrekt und kodiert danach die Zeichen im Zielformat. Nur die Kennzeichnung zu ändern wandelt keine Bytes um.
Fehler und Stolperfallen
Ungültige Bytefolgen können abgelehnt oder durch U+FFFD ersetzt werden. Kann die Zielkodierung ein Zeichen nicht darstellen, drohen Fehler, Ersatz oder Datenverlust.
Byte Order Mark, Endianness, Unicode-Normalisierung und Zeilenenden sind verwandte, aber eigene Fragen. Zeichenkodierung ist Darstellung, keine Verschlüsselung.
Nein. Unicode weist Zeichen Codepunkte und Eigenschaften zu; UTF-8 kodiert diese Punkte als Bytes.
Die Bytes wurden möglicherweise falsch dekodiert oder Zeichen ersetzt, weil die Zielkodierung sie nicht darstellen konnte.
Nein. Manche Bytefolgen passen zu mehreren Kodierungen, besonders kurzer ASCII-Text. Metadaten, BOM oder Kontext sind oft nötig.