einklich.net  > Erklärungen > Textkodierung

03. Jun. 2016

Textkodierung in Datennetzen

Vorbemerkung

Wenn zwei sich unterhalten wollen, müssen sie eine gemeinsame Sprache sprechen, klar. Das ist auch bei Rechnern so. Deshalb gibt es für die Kommunikation im Internet technische Standards, die die Software einhalten muß.

Fast nirgends prallen unterschiedlichste Systeme und mangelhaft eingestellte Softwareprogramme so „hart“ aufeinander wie in den Diskussionsgruppen des Usenet. Und daher gibt es dort oft Ärger z.B. über falsch behandelte Umlaute, mit nachfolgenden endlosen Diskussionen.

Dieses Posting habe ich in einer solchen Diskussion mal verfaßt, um klarzustellen, worum es eigentlich geht, wie Schriftzeichen über Datennetze transportiert werden und warum Fehler in diesem Bereich wirklich Fehler sind, auch wenn sie erst einmal nicht so aussehen.

From: "Volker Gringmuth" <news-fups@volker-gringmuth.de>
Newsgroups: de.comm.software.outlook-express
Subject: Umlautdeklaration (was: Nachrichten sichern!)
Date: Tue, 16 Apr 2002 17:40:24 GMT
Message-ID: <a9hun7.3vgbfp7.1@h1.einklich.de>


Sabine Schulz (sabine@sanflorimal.de) wrote:

> Daher empfinde ich es als angenehm, daß mein OE Umlaute korrekt
> dargstellt, egal ob sie codiert sind oder nicht.

Hast du's noch nicht ganz geschnallt? ;-)

Dein OE *errät* die Umlaute richtig, das ist aber auch schon alles. Und das heißt nicht, daß es immer so sein muß.

Nochmal zum Mitschreiben:

Verschickt werden keine Zeichen und keine Zahlen, verschickt werden letztendlich Ketten von Einsen und Nullen.

Diese Einsen und Nullen werden in Achtergruppen, sogenannten Bytes [sprich: Baits], zusammengefaßt. Jedes Byte steht für ein Zeichen. Man kann also genau 2^8 = 256 Zeichen darstellen (zwei Möglichkeiten pro Stelle hoch acht Stellen).

Es gibt aber viel mehr Zeichen auf der Welt.

Daher hat man sich auf verschiedene "Belegungen" geeinigt. Das sind die sogenannten Zeichensätze.

Damit die Kommunikation auf kleinster Ebene immer klappt, haben diese Zeichensätze einen gemeinsamen Bereich. Das ist die erste Hälfte - die sogenannten ASCII- [sprich: äski] oder 7-bit-Zeichen. Darin versteckt sich das normale Alphabet von a-z in Klein- und Großbuchstaben, die Ziffern, die wichtigsten Satzzeichen usw.

Wenn dein Reader nun ein F verschicken will, sagt der Zeichensatz deinem Rechner, daß dafür die Bitfolge 01000110 zu nehmen ist. Und das ist in jedem Zeichensatz so - wenn du nur Fs verschickst, brauchst du daher gar keinen Zeichensatz dranzuschreiben, trotzdem weiß jeder andere Rechner, daß 01000110 nur ein F sein kann.

Der schöne Name "Sabine" liest sich für die Netzwerkkarte (bzw. das Modem) dann so: 010100110110000101100010011010010110111001100101 [1]. Jedes Byte fängt mit einer Null an, alles 7-bit-Zeichen also, keine Deklaration nötig.

Die zweite Hälfte eines Zeichensatzes ist für die "Sonderzeichen" reserviert, die im normalen Alphabet nicht vorkommen. Weil man dafür jetzt das achte Bit braucht, nennt man sie auch 8-bit-Zeichen. Dummerweise gibt es davon viel mehr als die 128 verfügbaren Stellen, und deshalb braucht man mehr als einen Zeichensatz dazu.

Wenn du nun ein ä verschicken willst, muß dein Rechner sich einen Zeichensatz aussuchen, in dem dieses ä auch vorkommt. Da hat er mehrere zur Auswahl. Allerdings muß er darauf achten, daß der Rechner, der dein ä empfangen soll, diesen Zeichensatz auch kennt.

Normalerweise wird dein Rechner dafür den Zeichensatz iso-8859-1 auswählen, einfach deshalb, weil der hier üblich ist. Ein ä hat da die Bitfolge 11100100.

Allerdings bedeutet 11100100 nur in diesem Zeichensatz ein ä. In iso-8859-5 ist es was Kyrillisches, in iso-8859-6 so'n arabischer Haken, in iso-8859-7 ein kleines griechisches delta, in iso-8859-8 ein hebräisches Heh und so weiter.

Deshalb muß dein Reader dazuschreiben, zu welchem Zeichensatz dieses 11100100 gehört. Das sieht dann so aus:

  charset="iso-8859-1"

Und er muß noch dazusagen, daß diese 8 bit so, wie sie sind, für ein Zeichen stehen (man kann 8-bit-Zeichen nämlich auch anders darstellen). Und das sieht dann so aus:

  Content-Transfer-Encoding: 8Bit

Wenn das nicht dabeisteht, dann nimmt dein Reader (meiner auch) für dieses 11100100 eben das erstbeste, was ihm einfällt: er nimmt das dazu gehörige Zeichen aus seinem Systemzeichensatz. Das ist bei uns beiden Windows-1252. Und da ist es zufällig auch ein ä. Zufällig - bitte merke dir das in dem Zusammenhang.

Andere Reader setzen dafür ein Fragezeichen ein - was eigentlich "richtiger" als das Raten ist, denn es ist ja gar nicht gesagt, daß der Rechner richtig rät.

Es ist also keineswegs so, daß dein toller[tm] OE die undeklarierten Umlaute "repariert".

Und morgen kommen wir zum Thema "Die Probleme mit dem Euro-Zeichen". Da ist das nämlich ganz vertrackt - in iso-8859-1 kommt es gar nicht vor, und im richtigen iso-Zeichensatz (iso-8859-15) liegt es an einer anderen Stelle als in Windows-1252. Da ist dann auch kein Raten mehr drin.

vG

___________
[1] Applaus bitte, ich hab das alles im Kopf ausgerechnet