CodeGym /Kurse /C# SELF /Was ist Kodierung und warum brauchst du sie

Was ist Kodierung und warum brauchst du sie

C# SELF
Level 37 , Lektion 0
Verfügbar

1. Einführung

Stell dir vor, du bist Diplomat auf einem internationalen Gipfel: jeder redet seine Sprache und hat seine Schrift. Um sich zu verstehen, braucht man einen universellen Übersetzer — ein gemeinsames Regelwerk zur Zuordnung von Zeichen. In Computern übernimmt diese Rolle die Kodierung.

Der Computer versteht nur eine "Sprache" — Folgen von Nullen und Einsen. 0 und 1 sind sein "Alphabet". Alle Informationen werden als Bytes gespeichert und übertragen. Ein Byte besteht aus 8 Bits (z. B. 01000001).

Wie verknüpfen wir also unsere Buchstaben und Zeichen mit Bytes? Wie erkennt der Computer, dass der Buchstabe „A“ nicht einfach nur eine Folge von 0/1 ist, sondern genau dieses Zeichen auf dem Bildschirm darstellen soll?

Kodierung

Eine Kodierung ist ein Regelwerk (eine Zuordnungstabelle), das definiert, wie jedes Zeichen (Buchstabe, Zahl, Satzzeichen, Ideogramm, Emoji) in eine Folge von Bytes umgewandelt wird und wie diese Bytes anschließend wieder in Zeichen interpretiert werden.

Eine Analogie — das Morsealphabet: du übersetzt Text in Punkte und Striche, sendest das Signal, und der Empfänger stellt anhand derselben Regeln die Zeichen wieder her. Im Computer ist die Vereinbarung "Bytes ↔ Zeichen" genau das, was wir Kodierung nennen.

2. Wozu brauchen wir diesen Ärger mit Kodierungen?

  • Übersetzung zwischen Menschen- und Maschinenwelt: ohne Kodierung ist Text nur eine Folge von Bytes; mit Kodierung werden daraus sinnvolle Zeichen.
  • Universalität und Kompatibilität: verschiedene Programme und OS müssen sich über die Regeln einig sein. Wenn eine Datei als UTF-8 deklariert ist, solltest du sie auch als UTF-8 lesen.
  • Unterstützung vieler Sprachen und Zeichen: Kyrillisch, arabische Schrift, Ideogramme, mathematische Symbole, Emojis — je größer der Zeichensatz, desto komplexer und flexibler muss die Kodierung sein.

3. ASCII – die "primitive" Kodierung

Eine der ältesten und grundlegendsten Kodierungen ist ASCII (American Standard Code for Information Interchange). Sie verwendet 7 Bits pro Zeichen, kann also 128 verschiedene Zeichen darstellen: das lateinische Alphabet (A-Z, a-z), Ziffern (0-9), Satzzeichen und Steuerzeichen (z. B. Zeilenumbruch, Tabulator).

Zeichen Dezimalcode (ASCII) Binärcode (7 Bit)
A
65
1000001
B
66
1000010
a
97
1100001
b
98
1100010
0
48
0110000
1
49
0110001
!
33
0100001
Leerzeichen
32
0100000

Historisch wurde das achte Bit oft als Paritätsbit verwendet, später begann man es in ASCII-"Erweiterungen" zu nutzen — so entstanden verschiedene Ein-Byte-Zeichensätze für Lokalisierungen, was zu Durcheinander führte.

Wenn du "Hallo" schreibst, sieht das auf der Platte ungefähr so aus (1 Byte pro Zeichen; beim 7-Bit-ASCII ist das höchstwertige Bit null):

H (01001000) e (01100101) l (01101100) l (01101100) o (01101111)

Einfach. Aber wo sind russische Buchstaben oder Ideogramme? Im ASCII gibt es sie nicht — es ist ein "einsprachiges Wörterbuch", geeignet nur für den grundlegenden lateinischen Zeichensatz.

4. Kauderwelsch — warum Kodierung kein Spaß ist

Manchmal, wenn du eine Datei öffnest, siehst du so etwas wie Привет statt „Hallo“. Das nennt man Kauderwelsch (oder Mojibake) — das Ergebnis davon, Bytes mit der falschen Kodierung zu lesen.

Angenommen, du hast „Hallo, Welt!“ im Zeichensatz Windows-1251 gespeichert; die Bytes für die russische Entsprechung (vereinfacht) könnten so aussehen:

  • P207
  • r240
  • i232
  • v226
  • e229
  • t242

Und dann öffnet dein Kollege die Datei in einem Editor, der ISO-8859-1 (Latin-1) erwartet, oder du verwendest StreamReader ohne explizite Kodierung, die nicht mit der Datei übereinstimmt. Ergebnis: das Byte 207 wird in einer anderen Tabelle interpretiert — und der Text bricht zusammen.

Originalzeichen (Windows-1251) Byte-Darstellung (Beispiel) Als ISO-8859-1 gelesenes Zeichen
P
207
Ç
r
240
à
i
232
è
v
226
â
e
229
å
t
242
ò

Am Ende erhält man Çàèâåò statt „Hallo“. Wenn ein Zeichen in der erwarteten Kodierung überhaupt nicht vorhanden ist, siehst du Kästchen oder Fragezeichen.

Daraus folgt die wichtigste praktische Regel: Beim Lesen/Schreiben von Texten sollte die Kodierung immer explizit angegeben werden, besonders wenn die Datenquelle nicht unter deiner Kontrolle ist. In .NET macht man das über StreamReader/StreamWriter mit der passenden Encoding (z. B. UTF-8 oder Encoding.GetEncoding("windows-1251")). Das hilft, Kauderwelsch zu vermeiden und einen korrekten Datenaustausch zwischen Systemen zu gewährleisten.

In den nächsten Vorlesungen lernen wir, wie man sicher die richtige Kodierung beim Arbeiten mit Dateien und Streams auswählt und angibt, damit dein Code international, robust und zuverlässig wird.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION