ASCII(1)

Zeichencodierungssystem mit 128 Zeichen.

ASCII-20240813090146146.png

I. Aufbau


Grenzen

Keine Umlaute, keine anderen Alphabete → nationale Behelfslösungen wie DIN 66003 ersetzten [ \ ] { | } durch Ä Ö Ü ä ö ü ß. Erweitert durch ISO 8859-1/Latin-1 (8 Bit), heute abgelöst von Unicode mit UTF-8 (das ASCII-kompatibel bleibt: häufige Zeichen = 1 Byte).

II. Extended ASCII (8 Bit)

Nach ASCII war klar: 128 Zeichen reichen nicht. Deshalb wurde das 8. Bit als Datenbits genutzt:

Standard Bits Zeichen Einsatz
ASCII 7 128 International
ISO 8859-1 (Latin-1) 8 256 Westeuropa, Umlaute & Sonderzeichen
ISO 8859-2 8 256 Osteuropa (ą, ć, …)
Windows-1252 8 256 Microsoft (ähnlich Latin-1, aber mit $€ †…)

ASCII-Kompatibilität: Die Codes 0x000x7F sind gleich, Erweiterung nutzt 0x800xFF.

III. Unicode & UTF-Varianten

Problem mit Extended ASCII: Welt hat >1000 verschiedene Alphabete & Symbole. 8 Bit (256 Zeichen) reichen nicht.

Lösung: Unicode

Unicode gibt jedem Zeichen aller Alphabete einen eindeutigen Codepunkt (Notation U+, z.B. U+263A = ☺, U+00E4 = ä, U+4E2D = 中).

Lösung: UTF-Varianten (UTF-8, UTF-16, UTF-32):

Format Bytes Speicher-Effizienz Kompatibilität Einsatz
UTF-8 1–4 (variabel) ✅ kompakt (ASCII = 1 Byte) ✅ ASCII-kompatibel Standard Web & Linux
UTF-16 2 oder 4 mittel ❌ not ASCII-kompatibel Windows, Java, alte XML
UTF-32 immer 4 ❌ verschwenderisch ❌ not ASCII-kompatibel kaum genutzt

UTF-8 im Detail

Die clevere Codierung: häufige Zeichen kurz, seltene länger:

1-Byte (ASCII):       0xxxxxxx                    (0x00–0x7F) ← 128 Zeichen
2-Byte:          110xxxxx 10xxxxxx               (0xC0–0xDF)
3-Byte:     1110xxxx 10xxxxxx 10xxxxxx           (0xE0–0xEF)
4-Byte: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx     (0xF0–0xF7)
UTF-8-Codierung

Zeichen ä (U+00E4):

  • Codepunkt 0xE4 = 11100100 (nicht 0–0x7F) → braucht 2 Byte.
  • UTF-8: 11000011 10100100 (0xC3 0xA4)

Zeichen (U+4E2D):

  • Codepunkt 0x4E2D (>0x7FF) → braucht 3 Byte.
  • UTF-8: 11100100 10111000 10101101 (0xE4 0xB8 0xAD)

Vorteile UTF-8:

UTF-16 (für Kontext)

UTF-16 ist nicht ASCII-kompatibel, aber effizient für Sprachen mit vielen Nicht-ASCII-Zeichen (CJK):

2-Byte (BMP):  0xD800–0xDBFF 0xDC00–0xDFFF  (Surrogate Pair für >0xFFFF)

→ Windows und Java nutzen UTF-16, weil sie vor UTF-8-Dominanz designt wurden.