Zeichencodierung/Bytes und Buchstaben

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Computer kennen im Prinzip keine Buchstaben oder Zeichen, sondern nur Bytes. Bytes sind Zahlen im Bereich von 0 bis 255. Um mit Zahlen einen Text darstellen zu können, benötigt der Computer eine Zuordnungstabelle, in der verzeichnet ist, welche Zahl für welchen Buchstaben stehen soll. Diese Tabelle ist in beide Richtungen eindeutig, aus einem Buchstaben wird also exakt eine Zahl, und aus dieser Zahl wird umgekehrt wieder exakt dieser Buchstabe.

ASCII

Grundsätzlich ist die Zuordnung der Zahl zum Buchstaben vollkommen willkürlich wählbar, und daher entwickelten sich in der Anfangszeit der Computer in Amerika mehrere unterschiedliche Zuordnungsvorschriften. Von diesen haben sich zwei heute gehalten: der American Standard Code for Information Interchange (ASCII) und der Extended Binary Coded Decimals Interchange Code (EBCDIC). Der Unterschied zwischen den beiden lässt sich an einem Beispiel verdeutlichen: Im ASCII wird das große A dem Bytewert 65 zugeordnet, und das kleine a dem Bytewert 97. Im EBCDIC erhält das kleine a den Wert 129, das große A den Wert 193.

Drückt man also eine Taste der Tastatur, erkennt der Computer, welche Taste gedrückt wurde, und ordnet ihr aufgrund des konfigurierten Tastaturlayouts den Bytewert des Buchstabens zu, der sich dahinter verbirgt. Bei der Ausgabe des Buchstabens auf dem Bildschirm wird der Bytewert umgewandelt in die Anweisung, wie der entsprechenden Buchstabe zu malen ist, und er erscheint dann auf dem Bildschirm. Wie der Buchstabe konkret aussieht, entscheidet dabei die Malanweisung der Schriftart. Ändert man die Schriftart, wird eine neue Malanweisung verwendet, aber die Bytewerte der Zeichen bleiben identisch.

ASCII-Tabelle
Dezimal  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
Hex. 0 1 2 3 4 5 6 7 8 9 A B C D E F
 32 20 ! " # $ % & ' ( ) * + , - . /
 48 30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
 64 40 @ A B C D E F G H I J K L M N O
 80 50 P Q R S T U V W X Y Z [ \ ] ^ _
 96 60 ` a b c d e f g h i j k l m n o
112 70 p q r s t u v w x y z { | } ~  

Diese betagten Codes wie ASCII und EBCDIC haben jedoch eine Schwäche: Mit ihnen lassen sich, da sie einem Zeichen ein Byte zuordnen, maximal 256 verschiedene Zeichen darstellen. Dieser Zeichenvorrat reicht gerade für das lateinische Alphabet und einige zusätzliche Zeichen. Als die Codes in den 1960ern entstanden, war das für die englisch sprechenden Amerikaner ausreichend. Außerdem mussten technische Beschränkungen ebenfalls berücksichtigt werden. Aber es gibt weltweit noch viele andere Sprachen und Alphabete und somit weit mehr als 256 unterschiedliche Zeichen. Als ASCII entstand, kam man – zumindest in der Datenverarbeitung im englischen Sprachraum – mit 128 verschiedenen Zeichen aus, es reichten daher 7 Bit für die Codierung des Zeichensatzes. Das 8. Bit eines Bytes wurde nicht benutzt oder für verschiedene andere Zwecke benutzt, beispielsweise als Paritätsbit oder für Erweiterungen von ASCII wie ISO-8859-15 oder UTF-8. Nebenstehend ist die ASCII-Codetabelle dargestellt, soweit es sich um druckbare Zeichen handelt (die Zeichen von 0 bis 31 sowie 127 sind Steuerzeichen). Um den ASCII-Wert eines Zeichens zu ermitteln, addieren Sie einfach den Zeilen- und Spaltenwert – entweder in dezimaler oder hexadezimaler Form. So hat z. B. der Großbuchstabe „K“ den dezimalen Wert „75“ (=64+11), bzw. den hexadezimalen Wert „4B“ (=40+B).

Die erste, nicht hundertprozentig befriedigende Lösung für dieses Problem bestand darin, für andere Alphabete neue Zuordnungen zu erstellen. Dies bedeutete bei der interkulturellen Kommunikation aber einen kleinen Mehraufwand. Wollte beispielsweise ein Russe einem Amerikaner einen russischen Text zukommen lassen, so reichte es nicht, einfach die Textdatei weiterzugeben. Der Absender musste zusätzlich die für das kyrillische Alphabet verwendete Codierung angeben. Mit der amerikanischen Codierung würde der Computer des Empfängers die Bytes als lateinische Buchstaben interpretieren und somit einen sinnlosen Buchstabensalat produzieren.

ISO-8859-Familie

 Win-1252  und ISO-8859-1
Dezimal  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
Hex. 0 1 2 3 4 5 6 7 8 9 A B C D E F
128 80   ƒ ˆ Š Œ   Ž  
144 90   ˜ š œ   ž Ÿ
160 A0   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬   ® ¯
176 B0 ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾ ¿
192 C0 À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
208 D0 Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
224 E0 à á â ã ä å æ ç è é ê ë ì í î ï
240 F0 ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
Farben: nicht belegt, nicht sichtbar

Im westeuropäischen Sprachraum verbreiteten sich insbesondere zwei Codierungen aus der sogenannten ISO-8859-Familie: ISO-8859-1 und ISO-8859-15. Den Codierungen der ISO-8859-Familie ist gemeinsam, dass sie nur 256 verschiedene Zeichen codieren können, da ein Zeichen immer mit einem Byte codiert wird. Jede dieser Codetabellen versucht, möglichst alle Zeichen möglichst vieler Schriften zu speichern. Sie verwenden alle die ASCII-Codetabelle für die Zeichen 0 bis 127 und definieren zusätzlich die Werte 160 bis 255. Sofern in diesem Bereich das gleiche Zeichen in verschiedenen Schriften vorkommt, überlappen sie sich zumeist.

Eine weitere in Westeuropa häufiger verwendete Codierung ist Windows-1252, die auf ISO-8859-1 aufbaut und zusätzlich die Zeichen 128 bis 159 verwendet. Da sich auf diesen Positionen bei ISO-8859-1 keine für HTML relevanten Zeichen befinden und diese Codierung oft mit Windows-1252 verwechselt wird, verwenden Browser auch dann Windows-1252, wenn das Dokument als ISO-8859-1 deklariert ist.

Es blieb aber immer das Problem, dass viele Zeichen nicht in allen Codierungen vorhanden waren. Das Euro-Zeichen (€) fehlt z. B. in den meisten ISO-Codierungen. HTML 3.2 versuchte, das Problem zu lösen, indem für ISO-8859-1 und einige andere Zeichen in anderen Codierungen (z. B. griechische Buchstaben) Zeichen-Entities definiert wurden. Der Buchstabe „Ä“ kann z. B. auch als „&Auml;“ (= A mit Umlaut) angegeben werden (siehe hierzu die Zeichenreferenz) – unabhängig von der Codierung. Letztlich war dieses Verfahren aber auch nicht zielführend.

Weiterhin gibt es für die Sprachregionen Osteuropas (Russisch etc.) sowie die asiatischen Sprachen (Chinesisch, Japanisch, Koreanisch, abgekürzt CJK) eigene Codetabellen, die sich teilweise eigenständig und unabhängig entwickelt haben und mitunter nur die Anforderungen des jeweiligen Sprachraumes berücksichtigen.