Zeichenkodierungen – ASCII, ISO/IEC 8859, Unicode und UTF

Egal ob griechische Buchstaben, arabische Ziffern oder chinesische Zeichen, sie alle müssen auf irgendeine Weise digital speicherbar sein. Zeichenkodierungen ordnen allen gängigen Symbolen Binärzahlen zu. Was für Kodierungen es gibt, soll in diesem Artikel vorgestellt werden.

ASCII

Der American Standard Code for Information Interchange (ASCII) war bis zur Verbreitung von UTF die wohl meistverwendetste Zeichenkodierungen und ist auch heute noch sehr bekannt. Die erste Version wurde 1963 veröffentlicht, worauf noch einige spätere Veränderungen folgten. ASCII enthält Kodierungen für 128 Zeichen, 95 davon sind druckbare Zeichen, die anderen 33 sind Steuerzeichen (z.B. der Tabulator). Entsprechend benötigt jedes Zeichen 7 Bit, denn mit 7 Bit ergeben sich 27=128 Kombinationsmöglichkeiten. Das große A ist zum Beispiel die Nummer 65, hat also den Binärcode 10000012.

ISO/IEC 8859

Das Problem bei ASCII ist, dass nur die allernötigsten Zeichen enthalten sind. Hier in Deutschland ist diese Kodierung bereits problematisch, da sie keine Umlaute vorsieht. Die International Organization for Standardization (ISO)  und die International Electrotechnical Commission (IEC) definierten darum zwischen 1987 und 2001 insgesamt 16 Standards für zusätzliche Zeichen, wobei der 12. verworfen wurde. Entsprechend sind sie auch durchnummeriert: ISO/IEC 8859-1 bis ISO/IEC 8859-16. Jeder der Standards besteht aus 8 Bits, das ergibt 28=256 Kombinationsmöglichkeiten (die aber nicht alle genutzt werden). Die ersten 128 Zeichen davon sind mit ASCII identisch, die restlichen sind für weitere Zeichen reserviert, größtenteils aus europäischen Ländern. Jeder Standard ist für andere Alphabete zuständig, der 5. beispielsweise für das kyrillische oder der 17. für das griechische Alphabet. Besonders der für die westeuropäischen Zeichen erstellte ISO/IEC 8859-1, besser auch bekannt unter dem Namen Latin-1, war wichtig und ist es momentan noch mehr oder weniger.

Unicode

ISO/IEC 8859 löste zwar einige Probleme bei der Kodierung von Zeichen, war aber trotzdem nicht ausreichend. Um mehrere Alphabete in einem Text zu verwenden, musste man auch mehrere Zeichenkodierungen in dem Text benutzen. Außerdem reichten 256 Bit für einige Sprachen nicht annähernd aus. So umfasst die chinesische und auch die japanische Schrift mehrere zehntausende Schriftzeichen. Darum wurde 1991 die erste Version von Unicode veröffentlicht, ein Standard für mehrere Alphabete. Ziel war und ist die Kodierung, Benennung und Kategorisierung aller genutzten Schriftzeichen der Welt. Auch aktuell arbeitet das Unicode-Konsortium noch an Unicode. Mittlerweile sind schon weit über 100.000 Zeichen kodiert, darunter auch recht exotische wie Emojis oder bald auch die Zeichen der GebärdenSchrift. Platz ist übrigens für 1.114.112 Zeichen.

UTF

Ein Unicode Transformation Format (UTF) ist eine Vorgehensweise, bei der jedes Unicode-Zeichen einer Bytefolge zugeordnet wird. Unter den unterschiedlichen UTFs sind UTF-8, UTF-16 und UTF-32 die wohl bekanntesten. Ein verbreiteter Irrglaube ist der, dass UTF-16 mehr Zeichen als UTF-8 darstellen könne. Tatsächlich ist dem nicht so. Alle Unicode-Zeichen können von den drei genannten dargestellt werden. Der Unterschied liegt darin, wie die Speicherung erfolgt. Damit zusammenhängend sind auch der Speicherplatzbedarf und der Rechenaufwand zum Finden eines Zeichens. Die Zahlen 8 und 16 stehen übrigens nicht zwangsläufig für die Anzahl an Bits, die ein Zeichen verbraucht.

Unterschiede zwischen UTF-8, UTF-16 und UTF-32

UTF-8 ist momentan die im Internet verbreitetste Zeichenkodierung. Die Unicode-Zeichen werden hier mit einer variablen Bytegröße kodiert, diese liegt zwischen 1 und 4 Bytes. UTF-8 hat den Vorteil, dass es zu ASCII kompatibel ist. Außerdem ist es für Alphabete, die auf dem lateinischen Alphabet basieren, optimiert (sie belegen die Plätze, bei denen eher wenig Bytes benötigt werden). Problematisch sind asiatische Zeichen, diese brauchen in der Regel mehr Bytes Speicherplatz als bei UTF-16.

Bei der UTF-16 Kodierung werden entweder 2 oder 4 Bytes pro Unicode-Zeichen benötigt. Während UTF-16 praktischer bei asiatischen Zeichen ist, ist bei Texten mit lateinischen Zeichen der Speicherbedarf höher als der von UTF-8.

UTF-32 im vom Prinzip her am einfachsten. Jedes Unicode-Zeichen wird mit genau 32 Bit kodiert, wodurch weniger Rechenaufwand nötig ist. Bei UTF-8 muss z.B. geprüft werden, ob ein Zeichen unter den ersten 128 liegt (dann wäre nur 1 Byte zum Speichern nötig) oder darüber (dann wären 2, 3, 4 oder 5 Byte nötig, je nachdem, an welcher Position das Zeichen liegt). Der Nachteil von UTF-32 liegt offensichtlich im sehr hohen Speicherverbrauch.

Vielleicht gefällt dir auch...

1 Antwort

  1. 12. März 2015

    […] Datentyp char steht für ein einzelnes Unicode-Zeichen mit der UTF-16-Kodierung. Betrachte dazu das folgende […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.