Zeichenkodierung
Eine Zeichenkodierung (englisch Character encoding, kurz Encoding) erlaubt die eindeutige Zuordnung von Schriftzeichen (Buchstaben oder Ziffern) und Symbolen innerhalb eines Zeichensatzes. In der Elektronischen Datenverarbeitung werden Zeichen über einen Zahlenwert kodiert und eignen sich damit für Übertragungen oder Speicherungen. Der deutsche Umlaut Ü wird zum Beispiel im ISO-8859-1-Zeichensatz mit dem Dezimalwert 220 kodiert. Im EBCDIC-Zeichensatz kodiert der 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 transportieren, zum Beispiel durch optische, akustische oder elektrische Signale, in aller Regel durch Abfolgen von
- langem und kurzem Signal (bspw. bei Morsezeichen),
- hohem und tiefem Ton (bspw. akustische Übertragung bei Faxgeräten),
- hoher und niedriger Spannung (bspw. bei der elektronischen Datenspeicherung).
Binäre Systeme hatten seit jeher eine besondere Bedeutung, da mit steigender Anzahl der Basiselemente des Codes die Gefahr von Verwechslungen steigt.
Inhaltsverzeichnis
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">
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 und der damit verbundenen Notwendigkeit, Zeichen durch mehr als ein Byte darzustellen, 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.
Ein Zeichencode (ccs, coded character set) ist ein Zeichensatz S mit einer injektiven Abbildung zwischen den Schriftzeichen in S und einer Codemenge M (endliche Teilmenge der natürlichen Zahlen). Die Menge M heißt auch codespace, und die Mengen S und M zusammen mit der Abbildung von S auf M bezeichnet man auch als codepage.
Ein Codepunkt (codepoint oder encoded character) ist ein Element der Codemenge M, das sein zugeordnetes Zeichen aus S bezeichnet. Texte werden durch die Codepunkte ihrer Schriftzeichen dargestellt, also als Sequenz von Zahlen aus M.
Als nächstes muss man die Darstellung der Codepunkte im Rechner festlegen. Das encoding allgemein definiert die Darstellung der Codepunkte als Bytefolge. Mit encoding form (character encoding form, cef) bezeichnet man die Länge der Darstellungselemente (1, 2 oder 4 Byte) und die Abbildung der möglicherweise längeren Codepunkte in diese Elemente. Mit encoding scheme (character encoding scheme, ces) bezeichnet man die Ablage dieser Elemente im Speicher (Big oder little endian). Eine allgemein akzeptierte Übersetzung beider Begriffe existiert im Deutschen noch nicht. Eine Bytefolge, die einen Codepunkt und damit ein Zeichen darstellt, nennt man code unit.
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.
Bei Verwendung von 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, shan, 山 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 bigendian steht 5C, 71 im Speicher, mit littleendian 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
Literatur
- Jacques André: Caractères numériques: introduction. In: Cahiers GUTenberg. Bd. 26, Mai 1997, ISSN 1257-2217, S. 5–44, (in französischer Sprache).
- Yannis Haralambous: Fonts & encodings. From Unicode to advanced typography and everything in between. Übersetzt von P. Scott Horne. O'Reilly, Beijing u. a. 2007, ISBN 978-0-596-10242-5 (in englischer Sprache).
- Peter Karow: Digitale Schriften. Darstellung und Formate. 2. verbesserte Auflage. Springer, Berlin u. a. 1992, ISBN 3-540-54917-X.
- Mai-Linh Thi Truong, Jürgen Siebert, Erik Spiekermann (Hrsg.): FontBook. Digital Typeface Compendium (= FontBook 4). 4. überarbeitete und erweiterte Auflage. FSI FontShop International, Berlin 2006, ISBN 3-930023-04-0 (in englischer Sprache).
Weblinks
- Joel Spolsky: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) (deutsch)
- Character Set Converter – Windowsprogramm zum Konvertieren von Zeichensätzen.
- No Such Thing As Plain Text