UNICODE
Kiss Your ASCII Goodbye?

von Michaela Bociurko (Ausgabe 04/3, Oktober 2004)

 

Kasten: Über die Herkunft des Klammeraffen (Arobasen, Snabel-a, Sauschwanzerl, ...)

Kasten: Archaische und exotische Sprachen

 

»óÈ£: (ÁÖ)¾ÆÀ̳×ÀÓÁî /´ëÇ¥: ±èÅ Á¦
/»ç¾÷ÀÚµî·Ï¹øÈ£ 214-86-80418 /
ºÎ°¡Åë½Å»ç¾÷½Å°í¹øÈ£ 5279 / Åë½ ÅÆǸž÷
½Å°í¹øÈ£ °³² - 5173È£
¼¿ï½Ã °³²±¸ »ï¼ºµ¿ 141-30 µ¿½Åºôµù 11Ãþ / ÀüÈ,
02-559-1004 / Æѽº, 02-559-1001 ~ 3
/ °³ÀÎÁ¤º¸°ü¸® Ã¥ÀÓÀÚ: Á¤¿ë½Ä

Ein Unternehmer, der eine Anfrage an seinen Geschäftspartner in Korea richtete, erhielt obigen Text als Antwort. Wer nun hinter dem kryptischen Inhalt eine geschickte Verschlüsselungsmethode zwecks Verhinderung von Industriespionage wittert und bereits seine Enigma entstauben möchte, dem sei verraten: Höchstwahrscheinlich handelt es sich hierbei um ein simples technisches Problem. Der Absender verwendet vermutlich eine andere Zeichenkodierung. Unterstützt die vom Empfänger verwendete Applikation diese Kodierung nicht bzw. ist kein Schriftsatz installiert, der diese Kodierung darstellen kann, ist das Ergebnis lediglich eine wirre Buchstabensuppe.

Zeichenkodierungen - CES (Character Encoding Schemes), oftmals auch etwas irreführend als "Zeichensätze" bezeichnet - sind genormte Zuordnungsregeln, die die Darstellung von Textzeichen in Form von binären Zahlen (Byte-Werten) ermöglichen. Im Wesentlichen handelt es sich dabei um Tabellen, die einem Textzeichen einen bestimmten, jeweils einmaligen Byte-Wert zuordnen. Leider gibt es hierfür zahlreiche, miteinander meist unvereinbare Konventionen. Verschiedene Anwendungen, Computertypen, Sprachen und Regionen verwenden zudem verschiedene Standards. Ein Umstand, der historisch gewachsen ist und demnach einer kurzen Rückblende bedarf.

ASCII

Als in den 60er Jahren Think Tanks des Kalten Krieges das Internet eben erst "andachten", waren die Ansprüche im IT-Bereich noch äußerst bescheiden. Man konnte sich durchaus mit einem Zeichenvorrat begnügen, der gerade eben den Bedarf des angelsächsischen Raumes abdeckte: Dies waren die Ziffern 0-9, das lateinische Alphabet mit Klein- und Großbuchstaben, Interpunktion sowie ein paar weitere gebräuchliche Zeichen, wie etwa der allseits bekannte Klammeraffe (siehe Kasten). Ein solches Repertoire bot der Code ASCII (American Standard Code for Information Interchange), der 1963 von der ASA (American Standards Association) verabschiedet wurde. Dieser Code war schon zuvor für die Darstellung von Zeichen auf Lochstreifen in Gebrauch und ist (in modifizierter Form) heute immer noch der am häufigsten verwendete Zeichensatz im Internet.

Jedes Zeichen wird in ASCII mit 1 Byte kodiert. Tatsächlich belegt jedes ASCII-Zeichen nur die ersten sieben ("7-Bit-Zeichensatz") der acht Bit eines Bytes, daher sind lediglich 27, also 128 Zeichen in ASCII möglich. Die ersten 32 Zeichencodes in ASCII sind für Steuerzeichen reserviert - dies sind Zeichen, die keine Schriftzeichen darstellen, sondern die zur Steuerung von Ausgabegeräten dien(t)en. Abzüglich dieser reduziert sich die Zahl der mittels ASCII darstellbaren Zeichen auf gerade 96. Für Sonderzeichen diverser europäischer Regionen, wie beispielsweise ä, ö, ü, ß bietet ASCII keinen Platz.

Über die Herkunft des Klammeraffen (Arobasen, Snabel-a, Sauschwanzerl, ...)

Der Klammeraffe scheint ein seltenes Tierchen, das sich nur mittels Tastenkombination aus seinem Revier locken lässt und sich in eMail-Adressen so richtig heimelig fühlt. Nur wenigen ist indes seine Herkunft bekannt: So leitet sich @ ursprünglich von dem kommerziellen à ("3 Dutzend à 72 Heller") ab, das im kaufmännischen Bereich häufig in Bestellungen und Rechnungen verwendet wurde und vermutlich deshalb auch später dem Code ASCII hinzugefügt wurde. Da dieses Zeichen damit für die Rechenanlagen zur Verfügung stand, wurde es dann gelegentlich auch in der Datenverarbeitung als Abkürzung für das Wort at verwendet oder für andere Zwecke eingesetzt. Mit der Zeit setzte sich, obgleich die beiden Schreibweisen "à" und @ beide ihren Ursprung im Französischen haben, auch in unserer Region sukzessive die im Englischen übliche Aussprache (commercial) at durch.

ISO 8859 & Co

Um einigen dieser (regionalen) Mängel zu begegnen, wurden in der Folge zahlreiche erweiterte Zeichensätze geschaffen (siehe Artikel Was ist eine Codepage?, Comment 95/3). Diese verwendeten zur Kodierung nun alle acht Bit eines Bytes, sodass sie 256 Zeichen umfassen konnten ("8-Bit-Zeichensätze"). Allerdings divergierten regional die Vorstellungen davon, was mit den zusätzlichen 128 Zeichen geschehen sollte.

Als "prominentester" Vertreter der 8-Bit-Zeichensätze lässt sich der Standard ISO 8859 bezeichnen, der bereits in frühen Windows-Betriebssystemen Verwendung fand. Von ISO 8859 existieren verschiedene regionsbezogene Varianten (siehe Liste), wobei die ersten 128 Positionen bei allen identisch sind und den Zeichen des 7-Bit-Satzes ASCII entsprechen. Besondere Bedeutung kam dabei ISO 8859-1 (Latin-1) zu, da dieser aufgrund seiner häufigen Implementierung faktisch den ASCII-Standard ablöste.

Die Zeichentabelle von ISO 8859 umfasst (gegenwärtig):

  • ISO 8859-1 Westeuropa (Latin-1)
  • ISO 8859-2 Osteuropa (Latin-2)
  • ISO 8859-3 Südosteuropa und Esperanto (Latin-3)
  • ISO 8859-4 Baltikum (Latin-4)
  • ISO 8859-5 Kyrillisch
  • ISO 8859-6 Arabisch
  • ISO 8859-7 Griechisch
  • ISO 8859-8 Hebräisch
  • ISO 8859-9 Türkisch statt Isländisch, sonst wie Latin-1 (Latin-5)
  • ISO 8859-10 Nordisch, Lappland, Eskimo
  • ISO 8859-11 Thai
  • ISO 8859-13 Baltisch (Latin-7)
  • ISO 8859-14 Keltisch (Latin-8)
  • ISO 8859-15 Westeuropa mit Eurozeichen (Latin-9)
  • ISO 8859-16 Südosteuropa mit Eurozeichen (Latin-10)

Freilich vermochten auch diese erweiterten Zeichensätze nicht alle Defizite zu beseitigen - so blieb etwa die mangelnde Kompatibilität untereinander bestehen. Zudem erforderten einzelne Bereiche (wie beispielsweise sprachwissenschaftliche Texte, multilinguale Programme und Webseiten) einen größeren Pool an verfügbaren Zeichen. Ein besonderes Problem stellten asiatische Schriften wie das Chinesische, Koreanische und Japanische dar. Da bei ihnen nicht Buchstaben, sondern Schriftzeichen die kleinsten Texteinheiten bilden, waren hier nicht ein paar hundert, sondern tausende Kodierungsmöglichkeiten vonnöten.

Allgemeine Globalisierungstendenzen, die stetige Zunahme des elektronischen Datenverkehrs und das rasante Vordringen des Internet in den gewerblichen und privaten Bereich verstärkten schließlich den Wunsch nach einem universellen Zeichenkodierungsschema, mit dem sämtliche (gebräuchlichen) Schriftsprachen darstellbar gemacht werden könnten. Ende der 80er entstanden deshalb Initiativen mit der Absicht, ein derartiges System zu entwickeln.

Unicode - A New Era?

Aus einer dieser Initiativen ging 1991 das Unicode Konsortium hervor. Dessen Vorstand bildeten Vertreter führender Konzerne wie Apple, IBM, Microsoft, Novell und Sun. Der ursprüngliche Zweck des Unicode Konsortiums war die Standardisierung, Erweiterung und Vermarktung des - damals noch auf 16-Bit basierenden - Unicode-Zeichencodes. LinguistInnen und andere Fachleute hatten hierfür möglichst vollständig alle Schriftzeichen gegenwärtiger und vergangener Kulturen gesammelt und diese zu Zeichensets gruppiert, die nach sprachwissenschaftlichen Kriterien zusammengestellt wurden. Um die Standardisierung von Unicode zu gewährleisten, vereinbarte man mit der für die Internationale Norm ISO/IEC 10646 zuständigen Arbeitsgruppe eine enge Zusammenarbeit zur Synchronisation von Unicode und ISO/IEC 10646.

Im Gegensatz zu den meisten anderen Zeichenkodierungen hat Unicode ein offenes Repertoire, d.h. es wird laufend um neue Zeichen ergänzt. Da sich Unicode das ehrgeizige Ziel einer vollständigen Erfassung aller bekannten Zeichen aus gegenwärtigen und vergangenen Schriftkulturen setzte - also wahrlich die Schaffung eines "Universalcodes" - gilt jedes abstrakte Zeichen, das jemals kodiert werden könnte, als potentieller Kandidat für die Aufnahmeliste. Jeweils bei Erscheinen einer neuen Unicode-Version wird das vom Unicode Konsortium herausgegebene Buch The Unicode Standard neu aufgelegt. Darin sind alle Zeichen, Zeichenwerte, Zeichenklassen usw. genau aufgeschlüsselt und dargestellt. Die einzelnen Zeichenwert-Tabellen sind auch als PDF-Dateien auf den offiziellen Unicode-Webseiten zu finden.

Der Unicode-Standard kodiert Zeichen auf der Basis von Schriften, nicht auf der Basis von Sprachen. So wird darin beispielsweise nur ein Set lateinischer Zeichen definiert, obgleich die lateinische Schrift in den Alphabeten tausender verschiedener Sprachen Anwendung findet (dasselbe Prinzip gilt auch für andere Schriften, z.B. Kyrillisch, Arabisch, ...). Aber nicht nur Schriften wurden in den Unicode-Standard aufgenommen, auch mathematische Operatoren, Symbole oder Einzelteile von Zeichen (so genannte Glyphen), wie etwa der horizontale Doppelpunkt über deutschen Umlauten. Mithilfe von Glyphen ist es möglich, Zeichen dynamisch zu kombinieren. Beispielsweise gibt es in Unicode zwar ein deutsches "ä", der gleiche Buchstabe lässt sich aber auch aus "a" und dem Element für Doppelpunkt über dem Zeichen erzeugen (ein Prinzip, das sich auch OpenType-Schriftarten1) zunutze machen).

Weiters ist für jedes Zeichen im Unicode-System ein Set an Eigenschaften definiert. Zu diesen Eigenschaften zählt beispielsweise die Schreibrichtung (bei arabischen Zeichen etwa ist die Schreibrichtung von rechts nach links).

Um die Zeichenkodierung einfach und effizient zu gestalten, wird jedes Zeichen in Unicode in der Form U+xxxx notiert. Das U steht für Unicode, die x für je eine hexadezimale Ziffer. Bei Verwendung in HTML-Seiten sind Unicode-Zeichen als hexadezimale oder dezimale Codewerte einzugeben. Der dezimale Codewert muss zwischen den Steuerzeichen &#___; eingeschlossen sein, der hexadezimale zwischen den Steuerzeichen ___; (siehe Tabelle unten). Da der hexadezimale Codewert nur von neueren Webbrowsern interpretiert werden kann, sollte die dezimale Darstellung bevorzugt werden.2) Die Codewerte aller Unicode-Zeichen sind auf der offiziellen Website des Unicode Konsortiums zu finden.

Zeichen

Unicode

HTML-Kodierung dezimal

HTML-Kodierung hexadezimal

(quan = Hund)

U+72AC

犬

&#72AC;

(wen = Fisch)

U+9B69

魩

魩


Die Kodierung

Unicode verwendet drei verschiedene Kodierungsmöglichkeiten, die sich aus praktischen Überlegungen heraus ergaben:

  • Der "Klassiker" (UTF-16 oder UCS-2)3)
    Ursprünglich verwendete man ausschließlich eine 16-Bit-Kodierung (UTF-16). Diese erlaubte es, 65 536 Zeichen (2 Byte = 16 Bit = 216 Kombinationsmöglichkeiten) zu kodieren. Die Mehrheit der gebräuchlichsten Zeichen aus aller Welt konnte in dieses 2-Byte-Schema, das im Unicode-System auch als BMP (Basic Multilanguage Plane) bezeichnet wird, aufgenommen werden. BMP ist die gebräuchlichste Form von Unicode und wird deshalb oft - fälschlicherweise - als Synonym für Unicode verwendet.

  • Der "Universelle" (UTF-32 oder UCS-4)
    Da sich im Jahr 1999 mit der Version 3.1 bereits abzuzeichnen begann, dass auch die BMP früher oder später an ihre Grenzen stoßen würde, beschloss man einen anderen Weg zu gehen. So führte man zusätzlich eine 32-Bit-Kodierung, UTF-32, ein. Mit diesen nun insgesamt 232 Kombinationsmöglichkeiten, also 4 294 967 296 (!) Zeichen, glaubt man sich auch für die hinkünftige Aufnahme aller exotischen und archaischen Sprachen (siehe Kasten) gewappnet. Im BMP ließ man hingegen Teilbereiche unbelegt, um Spielraum für zukünftige Erweiterungen zu haben - derzeit stehen darin noch ca. 6700 Kodierungsmöglichkeiten zur Verfügung.

  • Der "Smarte" (UTF-8)
    Um den Bedarf an Speicherplatz gering zu halten, wurde für UTF-16 zudem die "platzsparende" Kodierung UTF-8 eingeführt. Beim UTF-8 Konzept wird jeder Codepoint von 0-127 - die am häufigsten benutzten Zeichen des Unicode - in einem einzelnen Byte abgespeichert. Der praktische Nebeneffekt: Ein Text, der sich mit den gebräuchlichsten lateinischen Zeichen begnügt, sieht in UTF-8 genauso aus wie in ASCII und kann demnach ohne zusätzlichen Aufwand weiterbearbeitet werden. Lediglich Codepoint 128 und alles darüber wird in 2 oder 3 Bytes gespeichert.

Diese verschiedenen Kodierungsformen erweisen sich als nützlich in unterschiedlichen Systemumgebungen. UTF-32 beispielsweise benötigt viel Speicherplatz, in den meisten Fällen wird man jedoch ohnehin mit einer der beiden anderen Kodierungen das Auslangen finden.

Die Darstellung

Unicode ist kein Zaubermittel. Es ist lediglich ein Standard für die Speicherung und den Austausch von Textdaten. Unicode beschreibt (ebenso wie andere Zeichencodes) eine Zahl, die als Kennung für ein bestimmtes Zeichen im Speicher eines Computers abgelegt werden soll. Das heißt, es existiert zwar die Information, um welches Zeichen es sich dabei handelt, nicht aber jene, wie dieses Zeichen nun grafisch dargestellt werden soll (z.B. auf dem Bildschirm oder Drucker). Für diese Aufgabe sind die Schriftarten (Fonts) zuständig. Nun ist aber kaum ein Font in der Lage, den kompletten Unicode-Zeichensatz darzustellen. Eine Ausnahme bildet hier etwa Arial Unicode MS. Der serifenlose Font auf der Basis der Arial-Schriftfamilie ist extrem umfangreich und deckt alle wichtigen Schriftsysteme der Welt ab, benötigt jedoch mit 23 MB entsprechende Mengen an Speicherplatz. In den meisten Fällen wird es aber ausreichen, die - je nach persönlichem Bedarf - am häufigsten verwendeten Fonts zu installieren.

Für die korrekte Wiedergabe von Unicode-Zeichen sind jedoch nicht nur die Fonts verantwortlich. Auch das Betriebssystem und das jeweilige Anwendungsprogramm müssen Unicode-kompatibel sein. - Besonders im Bereich der Betriebssysteme hat sich in den letzten Jahren einiges getan. Sowohl Microsoft Windows als auch Apple MacOS X arbeiten intern zunehmend mit Unicode, und auch von den meisten Internet-Browsern (z. B. Internet Explorer, Netscape, Mozilla, Opera) wird Unicode inzwischen unterstützt. Außerdem hat das WorldWideWeb Consortium (W3C) Unicode in den Standard HTML 4.0 aufgenommen.

Ein kleiner Tipp: Sollte Ihr Browser einmal Zeichen auf einer Webseite nicht korrekt darstellen, ist es möglicherweise hilfreich zu wissen, welche Kodierung bei diesem Dokument verwendet wurde, und zu testen, ob eine andere Kodierung das Anzeigeproblem löst. Wählen Sie hierfür in der Browserleiste Ansicht - Codierung (Internet Explorer) bzw. Ansicht - Zeichensatz (Mozilla, Netscape). Im HTML-Quellcode wird mitunter innerhalb des Headers angegeben, um welche Kodierung es sich handelt. Beispielsweise:

Unicode am Vormarsch?

Kann man demnach konstatieren, dass der Siegeszug von Unicode, den bereits vor etwa 12 Jahren der im PC Magazine erschienene Artikel Kiss Your ASCII Goodbye euphorisch ankündigte, indes stattfand? Ein kritischer Blick auf die Unicode-Kompatibilität gängiger Applikationen am Softwaremarkt legt die Vermutung nahe, dass die Ankündigung eines "finalen Abschiedskusses" immer noch ein wenig verfrüht erscheint. Selbst der ungeschlagene König der Layoutprogramme, Quark XPress, weigerte sich bis dato eine Unicode-Unterstützung anzubieten.

Resümierend lässt sich demnach feststellen: Auch wenn es bis zu einer universellen Unterstützung von Unicode noch ein weiter Weg ist, im Endbenutzer-Bereich waren in den letzten Jahren doch deutliche Fortschritte zu verzeichnen. 

Archaische und exotische Sprachen

Neben den unzähligen aktuellen Schriften hat Unicode auch eine Reihe historischer Schriften kodiert, die zwar heute nicht mehr in Gebrauch sind, für (sprach)wissenschaftliche Zwecke aber durchaus noch Relevanz besitzen. Beispiele wären hier etwa das keltische Ogham-Alphabet, das bis ins 4./5. Jahrhundert zurückdatiert und u.a. für irische und piktische Inschriften auf Grabsteinmonumenten verwendet wurde, oder das Runen-Alphabet, das germanische Stämme in Nordeuropa vom 3. Jahrhundert bis weit ins Mittelalter hinein benutzten und das auch als ein System von magischen Symbolen diente (siehe Abb. 1). Auch das Koptische, eine afro-asiatische Sprache, die im späten alten Ägypten verwendet wurde und - im Gegensatz zu den älteren Sprachen - nicht mit Hieroglyphen, sondern mit griechischen Buchstaben geschrieben wurde, ist inzwischen fester Bestandteil von Unicode.

Da es für derlei Schriftzeichen kaum standardmäßige Fonts gibt, behelfen sich viele Wissenschaftler, indem sie auf eigene Faust Schriftsätze entwickeln und diese den Studenten (meist kostenlos) zur Verfügung stellen. Wer selbst Fonts kreieren will, findet unter www.microsoft.com/typography/ die entsprechenden Spezifikationen beziehungsweise unter partners.adobe.com/asn/tech/type/ nützliche Tipps und Werkzeuge. Fonts für (fast) jede Sprache können auch kostenpflichtig via Internet erstanden werden.

Der Aufnahme eines neuen Schriftzeichensatzes in Unicode geht meist ein langer, heftig geführter sprachwissenschaftlicher Diskurs voraus, in welchem Fragen abgeklärt werden wie etwa: Bedarf es einer eigenen phönizischen Schrift oder handelt es sich hierbei lediglich um eine glyphische Variation des Hebräischen bzw. des Griechischen? Zuweilen kommt es auch vor, dass einer Schrift die Aufnahme in das Unicode-Repertoire verwehrt wird. Die Gründe hierfür können vielfältig sein, etwa wenn zu wenig über diese Schrift bekannt ist bzw. wenn sich die Schrift als ungeeignet für eine Kodierung erweist.

Aber auch etwas ungewöhnlichere Anträge werden zeitweise an das Unicode Konsortium herangetragen, wie etwa das von Star Trek-Fans initiierte Ansuchen zur Kodierung der klingonischen Schrift. Sehr zum Bedauern der Fangemeinde wurde der Antrag jedoch - nach eingehender Prüfung - vom Unicode Konsortium zurückgewiesen.

Links

Die offizielle Seite von Unicode: http://www.unicode.org

Viele nützliche Anwendungen: http://alanwood.net/unicode/

 

 

1) OpenType® ist ein neues, plattformübergreifendes Format für Schriftartendateien, das von Adobe in enger Zusammenarbeit mit Microsoft entwickelt wurde.

2) Die von Unicode vorgegebenen hexadezimalen Codewerte lassen sich mit einem Taschenrechner problemlos in dezimale Codewerte umrechnen (in Windows einfach Start - Programme - Zubehör - Rechner - Ansicht - Wissenschaftlich wählen, Ziffern eingeben und mittels Hex bzw. Dec umrechnen).

3) UCS steht für Universal Character Set, UTF für UCS Transformation Format, wobei die nachfolgende Zahl beschreibt, wie viele Bits (UTF) bzw. Bytes (UCS) die Kodierung verwendet.