Zeichenkodierung

Eine Zeichenkodierung (englisch Character encoding, kurz Encoding) erlaubt die eindeutige Zuordnung von Schriftzeichen (i. A. Buchstaben oder Ziffern) und Symbolen innerhalb eines Zeichensatzes. In der elektronischen Datenverarbeitung werden Zeichen über einen Zahlenwert kodiert, um sie zu übertragen oder zu speichern. Der deutsche Umlaut Ü wird zum Beispiel im ISO-8859-1-Zeichensatz mit dem Dezimalwert 220 kodiert. Im EBCDIC-Zeichensatz kodiert derselbe Wert 220 die geschweifte Klammer }. Zur richtigen Darstellung eines Zeichens muss also die Zeichenkodierung bekannt sein; der Zahlenwert allein reicht nicht aus.

Zahlenwerte aus Zeichenkodierungen lassen sich auf verschiedene Art speichern oder übertragen, z.B. als Morsezeichen, verschieden hohe Töne (Faxgerät), verschieden hohe Spannungen.

Binäre Systeme hatten seit jeher eine besondere Bedeutung, da mit steigender Anzahl der Basiselemente des Codes die Gefahr von Verwechslungen steigt.

Geschichte

Die Anfänge dieser Technik liegen in der Antike. Zum Beispiel informierte Agamemnon seine Truppen von einem Schiff aus mit dem Licht eines Feuers darüber, dass er die Invasion Trojas starten wollte. Bekannt sind ferner Rauchzeichen bei den Indianern oder Nachrichtenübermittlung durch Trommelzeichen in Afrika.

Insbesondere zur Verständigung von Schiffsverbänden in der Nautik wurden die Techniken später verfeinert. Sir Walter Raleigh erfand für die Verständigung seines Geschwaders auf der Südamerikafahrt 1617 eine Art Vorläufer der Flaggencodierung.

1648 schließlich war es Englands späterer König James II., der das erste Signalflaggensystem in der britischen Marine einführte.

Nach der Erfindung der Telegrafie benötigte man auch hier eine Zeichenkodierung. Aus den ursprünglichen Ideen des Engländers Alfred Brain entstanden 1837 der originale Morsecode und 1844 der modifizierte Morsecode.

Das CCITT (Comité Consultatif International Telegraphique et Telephonique) war schließlich die erste Institution, die einen standardisierten Zeichensatz definierte. Dabei basierte dieser Zeichensatz auf einem von Jean-Maurice-Émile Baudot 1870 entwickelten 5er-Code-Alphabet für seinen Synchrontelegraphen, dem Baudot-Code, dessen Prinzip noch heute verwendet wird.

Computer und Datenaustausch

Mit der Entwicklung des Computers begann die Umsetzung der im Grunde schon seit dem Baudot-Code verwendeten binären Zeichenkodierung in Bit-Folgen, bzw. intern meist in verschiedene elektrische Spannungswerte als Unterscheidungskriterium, ganz analog zu der bisher zur Unterscheidung der Signalwerte genutzten Tonhöhe oder Signaldauer.

Um diesen Bit-Folgen darstellbare Zeichen zuzuordnen, mussten Übersetzungstabellen, sogenannte Zeichensätze, engl. Charsets, festgelegt werden. 1963 wurde eine erste 7-Bit-Version des ASCII-Codes durch die ASA (American Standards Association) definiert, um eine Vereinheitlichung der Zeichenkodierung zu erreichen. Obwohl IBM an der Definition mitgearbeitet hatte, führte man 1964 einen eigenen 8-Bit-Zeichencode EBCDIC ein. Beide finden bis heute in der Computertechnik Verwendung.

Da für viele Sprachen jeweils unterschiedliche diakritische Zeichen benötigt werden, mit denen Buchstaben des lateinischen Schriftsystems modifiziert werden, gibt es für viele Sprachgruppen jeweils eigene Zeichensätze. Die ISO hat mit der Normenreihe ISO 8859 Zeichenkodierungen für alle europäischen Sprachen (einschließlich Türkisch) und Arabisch, Hebräisch sowie Thai standardisiert.

Das Unicode Consortium schließlich veröffentlichte 1991 eine erste Fassung des gleichnamigen Standards, der es sich zum Ziel gesetzt hat, alle Zeichen aller Sprachen in Codeform zu definieren. Unicode ist gleichzeitig die internationale Norm ISO 10646.

Bevor ein Text elektronisch verarbeitet wird, muss der verwendete Zeichensatz und die Zeichenkodierung festgelegt werden. Dazu dienen beispielsweise folgende Angaben:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Content-Type: text/plain; charset="ISO-8859-1"

Grafische Darstellung

Das Vorhandensein von Software für Zeichenkodierung und -dekodierung garantiert noch nicht die richtige Darstellung auf dem Computerbildschirm. Zu diesem Zweck muss auch eine Schriftart verfügbar sein, die die Zeichen des Zeichensatzes enthält.

Differenzierung der Begriffe durch Einführung des Unicodes

Mit Einführung des Unicodes mussten die Zeichen durch mehr als ein Byte dargestellt werden, und es wurden genauere Begriffe notwendig. Derzeit werden im Deutschen die Begriffe Zeichensatz, Code, Kodierung, encoding manchmal synonym, manchmal differenzierend verwendet. Im Englischen existieren bereits klare Differenzierungen:

Als nächstes muss man die Darstellung der Codepunkte im Rechner festlegen (encoding). Das encoding zerfällt in zwei Teile: encoding form und encoding scheme. Eine allgemein akzeptierte Übersetzung dieser Begriffe existiert im Deutschen noch nicht.

In einfachen Fällen gibt es nicht mehr als 256 = 28 Codepunkte, so dass man jeden Codepunkt in einem Byte speichern kann, z.B. bei Verwendung eines der in ISO 8859 definierten Zeichencodes. Mit Unicode ist das nicht mehr möglich, da S weit mehr als 256 Zeichen enthält. Häufige encodings sind UTF-8, UTF-16, UCS-2 und UTF-32.

Bei UTF-16 (cef) werden die Codepunkte zwischen 0 und 216-1 in zwei und alle größeren in vier Byte abgespeichert. Wie bei allen encodings mit mehr als einem Byte Elementlänge gibt es mindestens die zwei Schemen(ces) UTF-16BE (big-endian) und UTF-16LE (little-endian), die sich in der Reihenfolge der Bytes in einer code unit unterscheiden.

Beim UTF-32 verwendet man immer vier Byte für jeden Codepunkt, und UTF-8 verwendet je nach Codepunkt ein oder mehrere Bytes: die Codepunkte 0 bis 127 werden in einem einzigen Byte gespeichert, so dass diese Darstellung bei den meisten englischen und europäischen Texten platzsparend ist, denn die Zeichen mit diesen Codepunkten (Zeichen des ASCII) kommen mit Abstand am häufigsten vor. Weitere Verfahren sind etwa: SCSU, BOCU und Punycode. Komplexe Schemen können zwischen mehreren Varianten wechseln (ISO/IEC 2022).

Um die Reihenfolge der Bytes in einer code unit unmissverständlich anzugeben, wird oft eine BOM (byte order mark) vorangestellt (0xEF,0xBB,0xBF bei UTF-8; 0xFF, 0xFE bei UTF-16LE; 0xFE, 0xFF bei UTF-16BE).

Eine Glyphe ist eine grafische Darstellung eines einzelnen Schriftzeichens.

Beispiel: Das chinesische Schriftzeichen für Berg, shān, 山 hat im Unicode den Codepunkt U+5C71 = 山 und benötigt zur Darstellung 15 Bit. Mit UTF-16 als cef wird es als eine code unit abgelegt. Mit ces Big-endian steht 5C, 71 im Speicher, mit Little-endian 71, 5C. Mit UTF-8 stehen die drei units E5, B1, B1 im Speicher. Die Glyphe ist 山.

Zur Erleichterung für den verwirrten Leser sei noch angemerkt, dass die weitaus meisten Texte in einer der drei Unicode-encodings UTF-8, UTF-16BE oder UTF-16LE gespeichert sind, was den Umgang mit Texten wesentlich erleichtert.

Siehe auch

Trenner
Basierend auf einem Artikel in: Wikipedia.de
Seitenende
Seite zurück
©  biancahoegel.de
Datum der letzten Änderung: Jena, den: 14.08. 2022