# Zeichensatzkodierung: ASCII, Unicode und UTF-8

> Ein Zeichensatz ordnet jedem Zeichen eine Zahl zu, damit der Computer Text speichern kann. ASCII deckt mit 7 Bit nur 128 Zeichen ab – ohne Umlaute. Unicode vergibt für praktisch jedes Zeichen der Welt eine Nummer, UTF-8 ist die verbreitetste Art, diese Nummern zu speichern. Falsch dargestellte Umlaute entstehen fast immer, wenn Speicher- und Lesekodierung nicht zusammenpassen.

**Autor:** Mr. Benjamin · **Beruf:** IT-Grundlagen
**Veröffentlicht:** 2026-07-24 · **Aktualisiert:** 2026-10-28
**Quelle:** https://yellowbluetech.de/blog/zeichensaetze-unicode-utf8

---

„Grüße" wird zu „GrÃ¼ÃŸe" – dieses Ärgernis kennt jeder, der schon mal eine CSV-Datei geöffnet oder Daten zwischen Systemen übertragen hat. Dahinter steckt kein Zufall, sondern ein Missverständnis über Zeichensätze. Wer es einmal versteht, behebt solche Fehler in Minuten.

## Warum braucht ein Computer einen Zeichensatz?

Ein Computer speichert nur [Zahlen aus Nullen und Einsen](/blog/bit-byte-binaersystem) – Buchstaben kennt er nicht. Also braucht es eine vereinbarte Tabelle, die jedem Zeichen eine Nummer zuordnet.

> **Merksatz**
>
> Ein **Zeichensatz** ist eine Tabelle: Zeichen ↔ Zahl. Der Computer speichert die **Zahl**, die Software zeigt das zugehörige **Zeichen**. Nutzen beide Seiten unterschiedliche Tabellen, erscheint Buchstabensalat.

## ASCII: der Urahn

**ASCII** nutzt 7 Bit und kann damit **128 Zeichen** darstellen: Groß- und Kleinbuchstaben von A bis Z, Ziffern, Satzzeichen und Steuerzeichen. Beispiel: Das große `A` ist die Zahl **65**.

Das Problem: Für das englische Alphabet reicht das, für **Umlaute, ß oder Akzente nicht**. Deshalb entstanden viele nationale Erweiterungen auf 8 Bit (etwa ISO 8859-1 für Westeuropa) – und damit ein neues Problem: Dieselbe Zahl bedeutete je nach Tabelle ein anderes Zeichen.

## Unicode: eine Nummer für jedes Zeichen

**Unicode** löst das grundsätzlich: Es vergibt für **praktisch jedes Zeichen der Welt** eine eindeutige Nummer, den sogenannten **Codepoint** – lateinische Buchstaben, Kyrillisch, Chinesisch, Emojis. Das `ä` hat weltweit dieselbe Unicode-Nummer.

> **Merksatz**
>
> Unicode legt fest, **welche Nummer** ein Zeichen hat – aber nicht, **wie diese Nummer gespeichert** wird. Genau das regelt eine Kodierung wie **UTF-8**.

## UTF-8: die verbreitetste Kodierung

UTF-8 speichert Unicode-Nummern **mit variabler Länge**:

| Zeichen | Speicherbedarf in UTF-8 |
| --- | --- |
| A–Z, 0–9 (ASCII-Bereich) | 1 Byte |
| Umlaute, é, ñ | 2 Byte |
| Chinesische Zeichen | 3 Byte |
| Emojis | 4 Byte |

Der geniale Kniff: Für die alten ASCII-Zeichen braucht UTF-8 **genau ein Byte mit demselben Wert wie in ASCII**. Damit ist UTF-8 **abwärtskompatibel** – eine reine ASCII-Datei ist automatisch auch gültiges UTF-8. Deshalb hat sich UTF-8 im Web und in fast allen modernen Systemen durchgesetzt.

> **Prüfungstipp**
>
> Der Unterschied wird gern geprüft: **Unicode ist der Zeichensatz** (welche Nummer gehört zu welchem Zeichen), **UTF-8 ist die Kodierung** (wie wird diese Nummer in Bytes abgelegt). Merke außerdem: UTF-8 nutzt **1 bis 4 Byte** pro Zeichen und ist **abwärtskompatibel zu ASCII**.

## Woher kommt der Buchstabensalat?

> **Hinweis**
>
> Fast immer daher, dass eine Datei **in einer Kodierung gespeichert und in einer anderen gelesen** wird. Typischer Fall: Eine UTF-8-Datei wird als ISO 8859-1 interpretiert – dann werden die zwei Bytes eines `ü` als zwei separate Zeichen angezeigt („Ã¼"). Die Lösung ist nie „die Umlaute ersetzen", sondern **beide Seiten auf dieselbe Kodierung einstellen**, im Zweifel UTF-8. Bei Web-Seiten geschieht das über die Angabe im HTML-Kopf, bei Datenbanken über die Zeichensatz-Einstellung der Tabelle.

## Selbstkontrolle

**Frage:** Was ist der Unterschied zwischen Unicode und UTF-8?

- [ ] Es ist dasselbe, nur anders benannt.
- [x] Unicode vergibt die Nummern, UTF-8 legt fest, wie sie gespeichert werden.
- [ ] UTF-8 vergibt die Nummern, Unicode speichert sie.
- [ ] Unicode ist für Text, UTF-8 nur für Emojis.

**Erklärung:** Unicode ist der Zeichensatz: Er legt fest, welche eindeutige Nummer, den Codepoint, jedes Zeichen bekommt. UTF-8 ist eine Kodierung: Sie bestimmt, wie diese Nummer in Bytes gespeichert wird – mit variabler Länge von einem bis vier Byte.

## Häufige Fragen

### Was ist eine Zeichensatzkodierung?

Ein Zeichensatz ordnet jedem Zeichen eine Nummer zu, zum Beispiel Unicode. Die Kodierung legt fest, wie diese Nummer als Bytes gespeichert wird, zum Beispiel UTF-8. Mit Zeichensatzkodierung (auch Zeichenkodierung) meint man das Zusammenspiel von beidem: Damit Text richtig angezeigt wird, müssen Schreiber und Leser dieselbe Kodierung verwenden.

### Warum reicht ASCII nicht aus?

ASCII deckt mit 7 Bit nur 128 Zeichen ab, im Wesentlichen das englische Alphabet mit Ziffern und Satzzeichen. Umlaute, ß, Akzente oder gar nichtlateinische Schriften sind darin nicht vorgesehen. Für deutschsprachige Texte und erst recht für internationale Anwendungen ist das viel zu wenig.

### Wie viele Bytes braucht ein Zeichen in UTF-8?

Zwischen einem und vier, je nach Zeichen. Die klassischen ASCII-Zeichen belegen ein Byte, deutsche Umlaute zwei, viele asiatische Schriftzeichen drei und Emojis vier. Deshalb ist die Zeichenanzahl eines Textes nicht dasselbe wie seine Byte-Länge – ein häufiger Stolperstein beim Programmieren.

### Was bedeutet abwärtskompatibel zu ASCII?

Es bedeutet, dass UTF-8 die 128 ASCII-Zeichen mit exakt demselben Byte-Wert speichert wie ASCII selbst. Eine Datei, die nur ASCII-Zeichen enthält, ist damit gleichzeitig eine gültige UTF-8-Datei. Alte Systeme und Werkzeuge können solche Dateien weiterhin problemlos lesen.

### Wie behebe ich falsch dargestellte Umlaute?

Nicht durch Ersetzen der Zeichen, sondern indem du die Kodierung angleichst. Prüfe, in welcher Kodierung die Datei tatsächlich gespeichert ist, und stelle das lesende Programm darauf ein. Als dauerhafte Lösung sollten Editor, Datenbank, Webseite und Schnittstellen einheitlich auf UTF-8 stehen.

**Weiterlesen:** [JSON und XML: Datenformate im Vergleich](/blog/json-und-xml) · [Variablen und Datentypen einfach erklärt](/blog/variablen-und-datentypen)

## Das Wichtigste in Kürze

- Ein **Zeichensatz** ordnet jedem Zeichen eine **Zahl** zu.
- **ASCII**: 7 Bit, nur **128 Zeichen** – ohne Umlaute.
- **Unicode**: eine eindeutige Nummer (**Codepoint**) für praktisch jedes Zeichen der Welt.
- **UTF-8**: speichert diese Nummern mit **1 bis 4 Byte**, **abwärtskompatibel zu ASCII**.
- **Buchstabensalat** entsteht, wenn Speicher- und Lesekodierung nicht zusammenpassen.
