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:
- Definition des Zeichensatzes in einer HTML-Seite
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- Definition des Zeichensatzes in den Kopfzeilen (Headern) einer E-Mail oder eines HTTP-Pakets
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:
- Ein Zeichensatz (character set oder character repertoire) ist eine Menge S verschiedener Schriftzeichen.
- Eine Codemenge oder Coderaum (code space) ist eine endliche Teilmenge M der natürlichen Zahlen.
- Ein Zeichencode (ccs, coded character set, codepage) ist ein Zeichensatz S mit einer Codemenge M und einer injektiven Abbildung der Schriftzeichen in S auf die Zahlen in M.
- Ein Codepunkt (codepoint oder encoded character) ist ein Element der Codemenge M, das sein zugeordnetes Zeichen aus S bezeichnet. Ein Text wird durch die Codepunkte seiner Schriftzeichen dargestellt, also als Sequenz von Zahlen aus M.
- Ein codiertes Zeichen (encoded character) ist ein Zeichen aus S zusammen mit seinem Codepunkt aus M.
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.
- Mit encoding form (character encoding form, cef) bezeichnet man eine Abbildung der Codepunkte auf Bytefolgen. Jedem Codepunkt wird ein Byte oder eine Folge von mehreren Byte zugeordnet, wobei die Länge der Bytefolgen nicht für alle Codepunkte gleich sein muss. Eine solche Bytefolge, die ein Zeichen darstellt, nennt man code unit.
- Mit encoding scheme (character encoding scheme, ces) bezeichnet man die Byte-Reihenfolge, mit der eine code unit im Speicher abgelegt wird.
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
© biancahoegel.de
Datum der letzten Änderung: Jena, den: 14.08. 2022