Unicode

internationaler Standard zur Definition aller Schriftzeichen mit einem digitalen Code
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. Juni 2005 um 15:57 Uhr durch 217.248.29.87 (Diskussion) (Weblinks). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Unicode ist ein internationaler Standard, in dem langfristig für jedes sinntragende Zeichen bzw. Textelement aller bekannten Schriftkulturen und Zeichensysteme ein digitaler Code festgelegt wird. Er will das Problem der verschiedenen inkompatiblen Kodierungen in den unterschiedlichen Ländern beseitigen. Herkömmliche Computer-Zeichensysteme umfassen einen Zeichenvorrat von 128 (7 Bit) wie der sehr bekannte ASCII bzw. 256 (8 Bit) Zeichen, wie z. B. ISO Latin-1, wovon nach Abzug der Steuerzeichen 96 bzw. 192–224 als Schrift- und Sonderzeichen darstellbar sind. Diese Zeichenkodierungen erlauben die gleichzeitige Darstellung von nur wenigen Sprachen im selben Text, wenn man sich nicht damit behilft, in einem Text verschiedene Schriften mit unterschiedlichen Zeichensätzen zu verwenden. Dies behinderte den internationalen Datenaustausch erheblich. In Unicode finden sämtliche Zeichen bestehender Zeichensätze nach Industriestandards, sogenannten Codepages, und nationalen sowie ISO-Normen eine 1:1-Entsprechung. Heute erledigen die meisten Webbrowser die Darstellung dieser Zeichensätze mit einer Unicode-kodierten Schrift in der Regel perfekt und vom Benutzer unbemerkt.

Universal Character Set (UCS) ist die von ISO verwendete praktisch bedeutungsgleiche Bezeichnung des Unicode-Zeichensatzes.

Codes, Speicherung und Übertragung

Die Codes von Unicode-Zeichen werden hexadezimal mit vorangestelltem U+ dargestellt. Hierbei kann x als Platzhalter verwendet werden, wenn zusammenhängende Bereiche gemeint sind, wie U+01Fx für den Codebereich U+01F0 - U+01FF

Der Coderaum von Unicode umfasste ursprünglich 65.536 Zeichen (UCS-2, 16 Bit). Bald aber stellte sich dies als unzureichend heraus. Seit der Version 2.0 ist der Codebereich um weitere 16 gleichgroße Bereiche, sogenannte Planes, siehe Liste der Unicode-Blöcke, erweitert. Somit sind nun maximal 1.114.112 (= 220+216) Zeichen bzw. Codepoints im Codebereich von U+00000 bis U+10FFFF in Unicode vorgesehen (UCS-4, 32 Bit). Bislang, in Unicode 4.0, sind 96.382 Codes individuellen Zeichen zugeordnet. Das entspricht in etwa erst 9% des Coderaumes.

Die Codebereiche (Blöcke), in welche die Unicode-Planes untergliedert werden, sind in der Liste der Unicode-Blöcke vollständig aufgeführt. Neben den gültig kodierten Zeichen ist auch sehr langfristig, z. T. noch recht vage Geplantes aufgeführt. Links verweisen dort auf die offiziellen Codetabellen oder auf die weitere Planung betreffende Dokumente.

Die Speicherung und Übertragung von Unicode erfolgt in unterschiedlichen Formaten:

  • Unicode Transformation Format (UTF), wobei UTF-8 das gebräuchlichste ist, z.B. im Internet und in fast allen Betriebssystemen. Neben UTF-8 hat UTF-16 eine große Bedeutung, so z.B. als Zeichencodierung in Java, der dem Unicode UCS-4 für alle UCS-2 Codepoints entspricht, und alle anderen Codepoints als 2-er Sequenzen, die sogenannten „Surrogate Pairs“, abbildet.
  • SCSU (Standard Compression Scheme for Unicode) ist eine wenig effektive und gebräuchliche Methode zur platzsparenden Speicherung, siehe Weblinks.
  • UTF-EBCDIC ist eine Unicode-Erweiterung, die auf dem proprietären EBCDIC-Format von IBM-Großrechnern aufbaut.
  • Punycode dient dazu, Domainnamen mit nicht-ASCII Zeichen zu kodieren. Siehe auch: IDNA

Normierungsinstitutionen

Das gemeinnützige Unicode Consortium zeichnet für den Industriestandard Unicode verantwortlich. Von der ISO (International Organization for Standardization) wird die internationale Norm ISO 10646 herausgegeben. Beide Institutionen arbeiten eng zusammen. Seit 1993 sind Unicode und ISO 10646 bezüglich der Zeichenkodierung identisch. Während ISO 10646 lediglich die eigentliche Zeichenkodierung festlegt, gehört zum Unicode ein umfassendes Regelwerk, das u. A. für alle Zeichen weitere zur konkreten Anwendung wichtige Eigenschaften eindeutig festlegt wie Sortierreihenfolge, Schreibrichtung und Regeln für das Kombinieren von Zeichen.

Im Moment ist Unicode strenggenommen noch eine Untermenge von ISO 10646: Während ISO 10646 Zeichencodes mit bis zu 31 Bit zulässt, sind bei Unicode maximal 21 Bit erlaubt. In nächster Zeit aber dürfte der ISO-Codebereich auf den von Unicode reduziert werden.

Kodierungskriterien

Gegenüber anderen Normen gibt es bei Unicode die Besonderheit, dass einmal kodierte Zeichen niemals wieder entfernt werden, um die Langlebigkeit digitaler Daten zu gewährleisten. Sollte sich die Normierung eines Zeichens nachträglich als Fehler erweisen, wird allenfalls von seiner Verwendung abgeraten. Daher bedarf die Aufnahme eines Zeichens in den Standard einer äußerst sorgfältigen Prüfung, die sich über Jahre hinziehen kann.

Im Unicode werden „abstrakte Zeichen“ (engl.: characters) kodiert, nicht Glyphen. Letzteres ist die graphische Darstellung abstrakter Zeichen, die extrem unterschiedlich ausfallen kann, beim lateinischen Alphabet beispielsweise in Fraktur, Antiqua, im Irischen und in Handschriften, siehe auch Glyphe. Für Glyphenvarianten, deren Normierung als sinnvoll und notwendig nachgewiesen wird, sind vorsorglich 256 „Variation Selectors“ vorgesehen, die ggf. dem eigentlichen Code nachgestellt werden können.

Andererseits haben Schriften, die sowohl das lateinische als auch das griechische Alphabet enthalten, doppelt kodierte identische Glyphen für die folgenden mehrdeutigen Buchstaben: Α Β Ε Ζ Η Ι Κ Μ Ν Ο Ρ Τ Υ Χ. Von vielen Zeichen gibt es nicht nur durch die Schriftart bedingte Varianten sondern auch innerhalb einer Schriftart mehr oder minder notwendige sprach- schrift- oder kontextabhängige Glyphenvarianten und Ligaturen, zu deren Darstellung es sogenannter Smartfonttechniken wie OpenType, nicht aber einer Unicode-Kodierung bedarf.

Allerdings wird in Grenzfällen hart um die Entscheidung gerungen, ob es sich um Glyphenvarianten oder kodierungswürdige Zeichen, d.h. unterschiedliche (Grapheme) handelt. Beispielsweise sind nicht wenige Fachleute der Meinung, das phönizische Alphabet könne man als Glyphenvarianten des hebräischen betrachten, da der gesamte Zeichenvorrat des Phönizischen dort eindeutige Entsprechungen hat, und auch die beiden Sprachen sehr eng verwandt sind. Die Auffassung, es handele sich um ein separates Zeichensystem, in der Unicode-Terminologie „script“, hat sich letztlich durchgesetzt. Anders verhält es sich bei CJK: Chinesisch, Japanisch (Kanji) und Koreanisch (Hanja). Hier haben sich im Laufe der Jahrhunderte die Formen vieler gleichbedeutender Schriftzeichen auseinanderentwickelt. Dennoch teilen sich die sprachspezifischen Glyphen die selben Codes im Unicode. In der Praxis werden hier wohl überwiegend sprachspezifische Schriftarten verwendet, und die zeichnen sich schon durch außergewöhnliche Dateigrößen aus. Die einheitliche Kodierung der CJK-Schriftzeichen (Han Unification) war eine der wichtigsten und umfangreichsten Vorarbeiten für die Entwicklung von Unicode. Besonders in Japan ist sie durchaus umstritten. Zu Einzelheiten (engl.) siehe Weblinks.

Als der Grundstein für Unicode gelegt wurde, siehe Geschichte des Unicode, musste berücksichtigt werden, dass bereits eine Vielzahl unterschiedlicher Kodierungen millionenfach verwendet wurde. Unicode-basierte Systeme sollten herkömmlich kodierte Daten mit geringem Aufwand handhaben können. Hierzu wurde für die unteren 256 Zeichen die weit verbreitete ISO 8859-1-Kodierung (Latin1) beibehalten ebenso wie die Kodierungsarten verschiedener nationaler Normen, z. B. TIS 620 für Thailändisch (fast identisch mit ISO 8859-11) oder ISCII für indische Schriften, die in der ursprünglichen Reihenfolge lediglich in höhere Codebereiche verschoben wurden.

Jedes Zeichen maßgeblicher überkommender Kodierungen wurde in den Standard übernommen, auch wenn es den normalerweise angelegten Maßstäben nicht gerecht wird. Hierbei handelt es sich zu einem großen Teil um Zeichen, die aus zwei oder mehr Zeichen zusammengesetzt sind, wie Buchstaben mit diakritischen Zeichen. Im übrigen verfügt auch heute noch ein großer Teil der Software nicht über die Möglichkeit, Zeichen mit Diakritika ordentlich zusammenzusetzen. Die exakte Festlegung von äquivalenten Kodierungen ist Teil des zum Unicode gehörenden umfangreichen Regelwerks. Obgleich die hexadekadischen Ziffern A - F formal die Kriterien für eine gesonderte Kodierung erfüllen, musste dies unterbleiben, weil in der Praxis deren Funktion stets von den Buchstaben A - F übernommen wird.

Vielen Unicode-Zeichen ist keine Glyphe zugeordnet. Auch sie gelten als „characters“. Neben den Steuerzeichen wie Zeilenvorschub (U+000A), Tabulator (U+0009) usw. sind allein 19 Zeichen explizit als Leerzeichen definiert, sogar solche ohne Breite, die u.a. als Worttrenner gebraucht werden für Sprachen wie Thai oder Tibetisch, die ohne Wortzwischenraum geschrieben werden. Für bidirektionalen Text, z.B. Arabisch - Lateinisch sind sieben Formatierungszeichen notwendig.

Beispiel: Combining Grapheme Joiner (CGJ)

Der CGJ ist ein unsichtbares Sonderzeichen, das normalerweise von den Anwendungsprogramen völlig ignoriert wird (engl.: default ignorable). Er soll audrücklich nicht zur Kennzeichnung von Glyphenvarianten o. Ä. verwendet werden. Sein Gebrauch ist wie folgt definiert:

In manchen Sprachen gibt es Digraphen und Trigraphen, die grundsätzlich als eigenständige Buchstaben behandelt, d.h. insbesondere sortiert werden. Im Ungarischen beispielsweise betrifft das: cs, dz, dzs, gy, ly, ny, sz, ty und zs. Ausnahmen hiervon bei Bedarf zu kennzeichnen, wurde der „Combining Grapheme Joiner“ CGJ (U+034F) eingeführt. Der Name bedeutet eigentlich das Gegenteil, aber, auch das gehört zum Standard, auch die Namen kodierter Zeichen werden niemals geändert.

Trägt ein Buchstabe mehrere Diakritika drüber oder drunter, werden diese normalerweise vertikal gestapelt. Für Ausnahmefälle, in denen zwei Diakritika nebeneinander stehen müssen, sieht Unicode vor, dass ein CGJ dazwischengestellt wird. Es obliegt dem Schriftentwickler, die Erscheinungform der Zeichenfolgen „Diakritikon1 CGJ Diakritikon2“ festzulegen, auf die dann mittels einer Schrifttechnik wie OpenType zugegriffen werden kann.

Die im Standard festgelegte Eigenschaft „default ignorable“ qualifiziert den CGJ, in Sonderfällen auch andere sonst unnötige feine Unterschiede zu markieren. So kann die Datenverarbeitung deutscher Bibliotheken die Unterscheidung von Umlaut und Trema (meist für fremdsprachige Namen) erfordern. Hier empfiehlt Unicode, dem Trema (U+0308) den CGJ voranzustellen, um es als Umlaut zu kennzeichnen. Die ursprünglich von DIN vorgeschlagene nachträgliche gesonderte Kodierung der Umlaut-Punkte hätte zu einer kaum vertretbaren Inkonsistenz großer Datenmengen geführt.

Eingabemethoden

Will man ein Unicode-Zeichen (zum Beispiel „⊕“) in HTML oder XML verwenden, sucht man es zunächst aus der entsprechenden Tabelle (hier: Mathematische Symbole). Dort ist seine Zeichennummer hexadezimal angegeben. Mit dieser Zeichennummer erstellt man dann eine Zeichenentität durch Voranstellen von „&#x“ und Anfügen eines Semikolons, eben „⊕“. Die Zeichennummer kann in der Zeichenentität auch dezimal, dann ohne führendes „x“, angegeben werden, zum Beispiel „⊕“ für das gleiche Zeichen. Die Text Encoding Initiative TEI hat Empfehlungen erarbeitet, Unicode in XML-Dateien in leichter verständlicher Form einzugeben. Hier handelt es sich um einen Satz benannter Zeichen (engl.: named entites), der in das Stylesheet integriert wird. Allgemein übliche benannte Zeichen sind z.B. die Umlaute wie „Ä“ statt „Ä" für Ä.

Im Vi Improved kann man Unicode-Zeichen (Voraussetzung: Unicode-basierte Locale oder als Unicode, zum Beispiel UTF-8, erkannte Datei) eingeben, indem man Strg+V,U und dann die hexadezimale Zeichennummer drückt, also zum Beispiel Strg+V,U,2,0,A,C für das Euro-Zeichen.

Im Emacs kann man Unicode-Zeichen eingeben, indem man ALT-c insert-ucs-character und dann die dezimale Zeichennummer eingibt, also 8364 für das Zeichen €.

Unter Windows (ab Windows 2000) kann in vielen Programmen der Code hexadezimal eingegeben werden. Mit nachfolgendem Alt-x, innerhalb von MS Word 2003 aber Alt-c, wird das Zeichen erzeugt. Diese Tastenkombination kann unter Windows XP auch benutzt werden, den Code des vor dem Cursor stehenden Zeichens anzuzeigen.

Ob das entsprechende Unicode-Zeichen auch tatsächlich am Bildschirm erscheint, hängt davon ab, ob die verwendete Schriftart eine Glyphe für das gewünschte Zeichen (also eine Grafik für die gewünschte Zeichennummer) enthält. Oftmals, z.B unter Windows wird, falls die verwendete Schrift ein Zeichen nicht enthält, nach Möglichkeit ein Zeichen aus einer anderen Schrift eingefügt. In der Typographie gilt so etwas als Fehler namens Zwiebelfisch. In Webbrowsern hingegen ist dies überaus nützlich.

Schriftarten

Mittlerweile hat der Zeichensatz von Unicode/ISO einen Umfang angenommen, der sich praktisch nicht mehr vollständig in einer Schriftart unterbringen lässt. In Postscript-CFF-, TrueType- und OpenType-Schriften kann man maximal 65.536 Zeichen unterbringen. So versteht es sich von selbst, dass Unicode/ISO-Konformität einer Schrift nicht bedeutet, dass der komplette Zeichensatz enthalten sein muss, sondern lediglich, dass die enthaltene Zeichenauswahl normgerecht kodiert ist. Normalerweise wird eine dem Verwendungszweck oder Verbreitungsgebiet angemessene Auswahl getroffen. Die derzeit umfangreichste Schrift – in zwei Dateien aufgeteilt – ist Code 2000/Code 2001 von James Kass. Eine Übersicht über viele kostenlose und kommerzielle, umfangreiche und spezialisierte Unicode-Schriften bietet Allan Wood.

Versionen von Unicode

Derzeit erscheinen neue Versionen ungefähr im Abstand von 1 1/2 Jahren, wobei in der letzten Zeit jährlich etwa 1000 Zeichen neu aufgenommen werden.

  • DP 10646 1989 (Vorschlag für den Entwurf von ISO 10646, unabhängig von Unicode)
  • DIS-1 10646 1990 (Erster Entwurf für ISO 10646, unabhängig von Unicode)
  • Unicode 1.0.0 Oktober 1991
  • Unicode 1.0.1 Juni 1992 (Modifikationen um eine Zusammenführung mit ISO 10646 zu ermöglichen)
  • Unicode 1.1.0 Juni 1993 (Unicode und ISO-Norm erstmals vereinigt: Codes identisch zu ISO 10646-1: 1993)
  • Unicode 1.1.5 Juli 1995
  • Unicode 2.0.0 Juli 1996 (Abgleich mit ISO 10646 Erweiterungen)
  • Unicode 2.1.2 Mai 1998 (unter anderem Einführung des Eurozeichens)
  • Unicode 2.1.5 August 1998
  • Unicode 2.1.8 Dezember 1998
  • Unicode 2.1.9 April 1999
  • Unicode 3.0.0 September 1999 (Abgleich mit ISO 10646-1: 2000)
  • Unicode 3.0.1 August 2000
  • Unicode 3.1.0 März 2001 (Abgleich mit ISO 10646-2: 2001)
  • Unicode 3.1.1 August 2001
  • Unicode 3.2.0 März 2002
  • Unicode 4.0.0 April 2003 (Abgleich mit ISO 10646: 2003)
  • Unicode 4.0.1 März 2004
  • Unicode 4.1.0 März 2005

Unicode und Wikipedia

Um ausländische Schriften, die in Wikipedia verwendet werden (z.B. chinesische oder indische Schrift), korrekt darstellen zu können, sind folgende Schritte sinnvoll. Voraussetzung: man muss über einen Benutzernamen verfügen. (diese Lösung gilt für den Internet Explorer):

  1. Anlegen einer Seite mit folgendem Namen:
    http://de.wikipedia.org/wiki/Benutzer:eigenerBenutzername/monobook.css
  2. Kopieren folgender Zeile in die neue Seite:
    body, #globalWrapper {font-family: "Arial Unicode MS";}
  3. Speichern der Seite.
  4. Leeren des Cache im Browser (sonst kann es sein, dass es nicht sofort funktioniert.)
  5. Fertig! Ab sofort werden alle Unicode-Schriften korrekt dargestellt.

Voraussetzung: Arial Unicode MS muss auf dem Computer lokal installiert sein (bei neueren MS Office Versionen standardmäßig der Fall, unter Fonts nachschauen).

Um sicherzustellen, dass man die Zeichen nicht nur im deutschen Wikipedia korrekt sieht, ist es nötig, den schon beschriebenen Schritt auch auf den gewünschten ausländischen Seiten durchzuführen. Zuerst legt man (wie auf der deutschen Seite auch) einen Account für den gewünschten Benutzernamen an (kann derselbe wie auf der deutschen Seite sein).

Möchte man z.B. die Seiten des Sanskrit-Wikipedia korrekt in Unicode im Internet Explorer sehen, legt man dann folgende Datei an:

http://sa.wikipedia.org/wiki/user:eigenerBenutzername/monobook.css

Für Englisch:
http://en.wikipedia.org/wiki/user:eigenerBenutzername/monobook.css

Literatur

  • Joan Aliprand (Hrsgr.), Julie Allen (Hrsgr.), Joe Becker (Hrsgr.): The Unicode Standard Version 4.0. Addison Wesley 2003, ISBN 0321185781

Standards:

  • RFC 3629 (UTF-8, a transformation format of ISO 10646)
  • RFC 3492 (Punycode, für Sonderzeichen in Domainname)