text: Unicode
  Unicode [ˈjuːnɪkoʊd] ist ein internationaler Standard, in dem langfristig für jedes sinntragende Schriftzeichen bzw. Textelement aller bekannten Schriftkulturen und Zeichensysteme ein digitaler Code festgelegt wird. Ziel ist es, die Verwendung unterschiedlicher und inkompatibler Kodierungen in verschiedenen Ländern oder Kulturkreisen zu beseitigen.
  Unicode wird laufend um Zeichen weiterer Schriftsysteme ergänzt. ISO 10646 ist die von ISO verwendete praktisch bedeutungsgleiche Bezeichnung des Unicode-Zeichensatzes; er wird dort als Universal Character Set (UCS) bezeichnet.
  Die meist genutzte Anwendung ist UTF-8, das zunehmend von Websites und -browsern genutzt wird, um länderspezifische Zeichen abzubilden.
  2 Codes, Speicherung und Übertragung
  3 Normierungsinstitutionen
  4 Kodierungskriterien
  4.1 Beispiel: Combining Grapheme Joiner (CGJ)
  5 Gliederung in Ebenen und Blöcke
  Herkömmliche Computer-Zeichencodes umfassen nur einen begrenzten Vorrat an Zeichen, bei westlichen Zeichenkodierungen liegt diese Grenze meistens bei 128 (7 Bit) Codepositionen – wie bei dem sehr bekannten ASCII-Standard – oder 256 (8 Bit) Positionen, wie z. B. bei ISO 8859-1 (auch als Latin-1 bekannt) oder EBCDIC. Davon sind nach Abzug der Steuerzeichen 96 Elemente bei ASCII und 192 bis 224 Elemente bei den 8-Bit ISO-Zeichensätzen als Schrift- und Sonderzeichen darstellbar. Diese Zeichenkodierungen erlauben die gleichzeitige Darstellung nur weniger 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 in den 1980er und 1990er Jahren erheblich.
  ISO 2022[1] war ein erster Versuch, mehrere Sprachen mit nur einer Zeichenkodierung darstellen zu können. Die Kodierung benutzt Escapesequenzen, um zwischen verschiedenen Zeichensätzen (z. B. zwischen Latin-1 und Latin-2) wechseln zu können, allerdings konnte sich das System mit den Escapesequenzen nicht durchsetzen, sodass die Kodierung nur in Ostasien verwendet wird.[2]
  1991 wurde nach mehrjähriger Entwicklungszeit die Version 1.0.0 des Unicode-Standards veröffentlicht, die damals nur die europäischen, nahöstlichen und indischen Schriften kodierte.[3] Erst nach acht Monaten, nachdem die Han-Vereinheitlichung abgeschlossen war, erschien die Version 1.0.1, die erstmals ostasiatische Zeichen kodierte. Im Juni 1993 schließlich wurde der Unicode-Standard mit ISO 10646 synchronisiert, dazu wurden neue Zeichen hinzugefügt, aber auch das Tibetische aus dem Standard entfernt[4], da damals noch Zeichen und Blöcke ohne Probleme entfernt und verschoben werden durften.
  Nach drei Jahren erschien Unicode 2.0.0 Juli 1996 und fügte hebräische Zeichen sowie das in der vorherigen Version entfernte Tibetische hinzu und verschob die Hangul-Silben[4]. Unicode 2.1.0 fügte Mai 1998 das Eurozeichen und einige weitere Zeichen hinzu, außerdem wurde das System der Planes eingeführt, obwohl damals die einzigen Blöcke außerhalb der BMP zwei private Nutzungsbereiche waren. Unicode 3.0.0 kodierte im September 1999 viele neue Schriftsysteme, nämlich das Thaana-Alphabet, das Singhalesische, die birmanische Schrift, die Ge'ez-Abugida, die Cherokee-Schrift, kanadische Silben, Ogam, germanische Runen, die Khmer-Schrift, die mongolische Schrift, Braille, Yi und viele neue chinesische Schriftzeichen hinzu. Unicode 3.1.0 im März 2001 kodierte die altitalische Schrift, das gotische Alphabet, das Mormonen-Alphabet, Musiknoten und tausende neue chinesische Schriftzeichen in den neu geschaffenen Planes 1 und 2.[5] Unicode 3.2.0 fügte im März 2002 die phillipinischen Schriften und weitere Zeichen hinzu.[6]
  Unicode 4.0.0 erschien April 2003. Neu waren die Limbu-Schrift, Tai Nüa, die Linearschrift B, die ugaritische Schrift, das Shaw-Alphabet, die Osmaniya-Schrift und kyprische Silben.[7] In Unicode 4.1.0 wurde im März 2005 Griechisch und Koptisch getrennt kodiert, außerdem wurde Tai Lü, die buginesische Schrift, das Glagolitische, Nuschuri, die Tifinagh-Schrift, Syloti Nagri, die altpersische Keilschrift und die Kharoshthi-Schrift hinzugefügt.[8] In Unicode 5.0.0 wurden im Juli 2006 weitere Schriftsysteme hinzugefügt, die Neuheiten sind N'Ko, die balinesische Schrift, die Phagspa-Schrift, die phönizische Schrift sowie sumerische Keilschrift.[9]
  Die neueste Version von Unicode ist die Version 5.1.0, die April 2008 erschien und 100.000 Zeichen kodiert. Wieder wurden viele neue Schriftsyteme kodiert, dazu zählt das Sundanesische, die Lepcha-Schrift, Ol Chiki, die Vai-Schrift, die Saurashtra-Schrift, Kayah Li, die Rejang-Schrift, die Cham-Schrift, die lykische Schrift, die karische Schrift sowie die lydische Schrift.[10]
  In den letzten Jahren erschienen neue Versionen jeweils im Frühjahr, wobei in der letzten Zeit jährlich etwa 1000 Zeichen neu aufgenommen wurden.
  Codes, Speicherung und Übertragung
  Im Gegensatz zu früheren Zeichenkodierungen, welche meist nur ein bestimmtes Schriftsystem kodierten, ist es das Ziel von Unicode, alle in Gebrauch befindlichen Schriftsysteme und Zeichen zu kodieren[11]. Um dieses Ziel zu erreichen, wurde Unicode zunächst als ein 16-Bit-Zeichensatz mit insgesamt 65.536 Zeichen definiert. Da sich dieser Coderaum schon bald als unzureichend darstellte, wurde Unicode in der Version 2.0 auf 17 Planes zu je 65.536 Zeichen erweitert, sodass nunmehr ein Raum von insgesamt 1.114.112 Zeichen (von U+0000 bis U+10FFFF) zur Verfügung steht. In Unicode 5.1 sind 100.713 Codepoints individuellen Zeichen zugeordnet.
  Die Codes von Unicode-Zeichen – auch "Codepoints" genannt – werden hexadezimal mit vorangestelltem "U+" dargestellt, z. B. U+00DF für das ß. Hierbei kann "x" als Platzhalter verwendet werden, wenn zusammenhängende Bereiche gemeint sind, wie "U+01Fx" für den Codebereich U+01F0 bis U+01FF.
  Die Codebereiche (Blöcke), in welche die Unicode-Ebenen 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.
  Die Speicherung und Übertragung von Unicode erfolgt in unterschiedlichen Formaten (auch "Encodings" genannt). Zu den bekanntesten Formaten zählt das 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 Zeichenkodierung in Java. Basierend auf dem proprietären EBCDIC-Format von IBM-Großrechnern ist die UTF-EBCDIC-Kodierung definiert. Punycode dient dazu, Domainnamen mit Nicht-ASCII-Zeichen zu kodieren. Andere Formate zur Kodierung des Unicode-Standards sind CESU-8 und GB18030.
  Das gemeinnützige Unicode Consortium wurde 1991 gegründet und ist für den Industriestandard Unicode verantwortlich. Von der ISO (Internationale Organisation für Normung) 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 (sogenannte Properties) eindeutig festlegt wie Sortierreihenfolge, Leserichtung und Regeln für das Kombinieren von Zeichen.[12]
  Bezüglich der Codepoints ist Unicode eine Untermenge von ISO 10646: Während ISO 10646 Zeichencodes mit bis zu 31 Bit zulässt, sind bei Unicode maximal 21 Bit erlaubt.
  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.[13] 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 grafische Darstellung abstrakter Zeichen, die extrem unterschiedlich ausfallen kann, beim lateinischen Alphabet beispielsweise in Fraktur, Antiqua, der Irischen Schrift und in Handschriften.[14] 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.
  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. Andererseits haben Schriften, die sowohl das lateinische als auch das griechische Alphabet enthalten, doppelt kodierte identische Glyphen für die folgenden mehrdeutigen Buchstaben: Α Β Ε Ζ Η Ι Κ Μ Ν Ο Ρ Τ Υ Χ, die jedoch durch die unterschiedliche Verwendung gerechtfertigt sind.
  In Grenzfällen wird 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, man könne das phönizische Alphabet 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 und Koreanisch): Hier haben sich in den letzten Jahrhunderten die Formen vieler gleichbedeutender Schriftzeichen auseinanderentwickelt. Dennoch teilen sich die sprachspezifischen Glyphen dieselben Codes im Unicode (mit Ausnahme einiger Zeichen aus Kompatibilitätsgründen). In der Praxis werden hier überwiegend sprachspezifische Schriftarten verwendet, wodurch der Platzbedarf der Schriften zusammen hoch ist. 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.
  Als der Grundstein für Unicode gelegt wurde, musste berücksichtigt werden, dass bereits eine Vielzahl unterschiedlicher Kodierungen in verbreitetem Einsatz waren. 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.
  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. für Sprachen wie Thai oder Tibetisch, die ohne Wortzwischenraum geschrieben werden, als Worttrenner eingesetzt werden. Für bidirektionalen Text, z. B. Arabisch mit Lateinisch, sind sieben Formatierungszeichen notwendig.
  Beispiel: Combining Grapheme Joiner (CGJ)
  Der CGJ ist ein unsichtbares Sonderzeichen, das normalerweise von den Anwendungsprogrammen völlig ignoriert wird (engl.: "default ignorable"). Es soll ausdrü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. gesondert sortiert werden. Im Ungarischen beispielsweise betrifft das: cs, dz, dzs, gy, ly, ny, sz, ty und zs. Um Ausnahmen hiervon bei Bedarf zu kennzeichnen, wurde der "Combining Grapheme Joiner" CGJ (U+034F) eingeführt. Der Name ist jedoch irreführend, denn das Zeichen fügt keine Grapheme zusammen.
  Trägt ein Buchstabe mehrere Diakritika darüber oder darunter, 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 Erscheinungsform 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 erfordern; meistens für fremdsprachige Namen. Hier empfiehlt Unicode, dem Trema (U+0308) den CGJ voranzustellen, um es vom Umlaut zu unterscheiden. Die ursprünglich vom DIN vorgeschlagene nachträgliche gesonderte Kodierung der Umlaut-Punkte hätte zu einer kaum vertretbaren Inkonsistenz großer Datenmengen geführt.
  Gliederung in Ebenen und Blöcke
  Unicode ist untergliedert in Codebereiche zu jeweils 16 Bit bzw. 65.536 Zeichen, sogenannte Ebenen (eng. planes). Die wichtigste Ebene ist die erste Ebene, die Basic Multilingual Plane (BMP), auch Plane 0 genannt.
  Innerhalb der Ebenen werden zusammengehörende Zeichen in Blöcken (englisch Blocks) zusammengefasst. Meist behandelt ein Unicode-Block ein Schriftsystem, aus historischen Gründen hat sich allerdings ein gewisses Maß an Fragmentierung eingestellt. Oft wurden später noch Zeichen hinzugefügt und in anderen Blocks als Ergänzung untergebracht.
  Der erste Bereich, die Basic Multilingual Plane (dt. Grundlegender mehrsprachiger Codebereich), enthält hauptsächlich Schriftsysteme, die aktuell in Gebrauch sind, Satzzeichen und Symbole, Kontrollzeichen und Surrogate-Paare, und einen Bereich für private Nutzung.[15] Der Block ist stark fragmentiert und größtenteils belegt, sodass umfangreichere Schriftsysteme nicht mehr Platz finden. Der Zugriff auf andere Planes als Plane 0 ist in manchen Anwendungsprogrammen noch nicht oder nur eingeschränkt möglich.
  Darauf folgt die Supplementary Multilingual Plane (SMP, dt. Ergänzender mehrsprachiger Bereich, auch als Plane 1 bezeichnet), die mit Unicode 3.1 eingeführt wurde. Sie enthält vor allem historische Schriftsysteme, aber auch größere Ansammlungen an Zeichen, die selten in Gebrauch sind, wie z. B. Domino- und Mahjonggsteine. Zur Kodierung geplant sind auch Schriftsysteme, die zwar noch in Benutzung sind, aber zu groß für die BMP sind.[15]
  Die Supplementary Ideographic Plane (SIP, dt. Ergänzender ideographischer Bereich, auch als Plane 2 bezeichnet), die ebenfalls mit Unicode 3.1 eingeführt wurde, enthält ausschließlich CJK-Schriftzeichen, die selten benutzt werden, dazu zählen unter anderem auch die Chữ nôm, die früher in Vietnam benutzt wurden.[15]
  Die Supplementary Special-purpose Plane (SSP, dt. Ergänzender Bereich für spezielle Verwendungen, auch als Plane 14 bezeichnet) enthält einige wenige Kontrollzeichen zur Sprachmarkierung.[15]
  Die beiden letzten Codebereiche, jeweils Supplementary Private Use Area-A und -B, sind für private Nutzung reserviert. Die Planes 3 bis 13 sind noch nicht vergeben.[15]
  HTML und XML unterstützen Unicode mit Zeichencodes, die unabhängig vom eingestellten Zeichensatz das Unicode-Zeichen darstellen. Die Notation lautet � für dezimale Notation bzw. � für hexadezimale Notation, wobei das 0000 die Unicode-Nummer des Zeichens darstellt. Für bestimmte Zeichen sind auch benannte Zeichen (engl. named entities) definiert, so z. B. stellt ä das ä dar.[16]
  Im Editor Vim kann man ab Version 6 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. Eine alternative Eingabemöglichkeit ist die Benutzung der Digraph-Methode des Vim.
  In Emacs (ab Version 21.4) kann man Unicode-Zeichen eingeben, indem man Meta+X ucs-insert und dann die hexadezimale Zeichennummer eingibt.
  GNOME unterstützt die Eingabe über die Kombination Strg+Umschalttaste+<Unicode> bzw. in neueren Versionen Strg+U+<Unicode> bzw. Strg+Umschalttaste+U+<unicode>. Auch hier erfolgt die Eingabe in hexadezimaler Form.
  Unter Windows (ab Windows 2000) kann vielen Programmen (genauer in RichEdit-Feldern) der Code dezimal als Alt+<dezimales Unicode> auf dem numerischen Tastaturfeld eingegeben werden.
  Ab MS Word 2003 kann Unicode auch hexdezimal eingegeben werden als <Unicode> oder U+<Unicode> gefolgt von Alt+C im Dokument bzw. Alt+X in Dialogfeldern. Diese Tastenkombination kann auch benutzt werden, um den Code des vor dem Cursor stehenden Zeichens anzuzeigen.[17]
  Mittlerweile hat der Coderaum von Unicode/ISO einen Umfang angenommen (mehr als 100.000 Schriftzeichen), der sich nicht mehr vollständig in einer Schriftdatei unterbringen lässt. Die heutzutage gängigsten Schriftdateiformate, TrueType und OpenType, können maximal 65.536 Zeichen enthalten. So versteht es sich von selbst, dass Unicode/ISO-Konformität einer Schrift nicht bedeutet, dass der komplette Zeichensatz enthalten ist, sondern lediglich, dass die darin enthaltenen Zeichen normgerecht kodiert sind. Die derzeit umfangreichste Schrift ist die in drei Dateien aufgeteilte Shareware Code2000 bis Code2002 von James Kass.[18] Auch diese bildet jedoch nicht jedes Unicode-Zeichen ab.
  Das freie Programm gucharmap (für Linux/UNIX) stellt den Unicode-Zeichensatz auf dem Bildschirm dar und bietet zusätzliche Informationen zu den einzelnen Zeichen.
  Microsoft Windows liefert entsprechend charmap.exe (Zeichentabelle) mit. Komfortabler kann man Unicode-Zeichen mit der kostenlosen Software BabelMap (für Windows)[19] suchen und eingeben. Das Unicode Consortium bietet inzwischen auch einen Browser an.[20] Unter Apple Mac OS X steht ebenfalls eine systemweite Zeichenpalette bereit.
  Unicode wird vor allem von Wissenschaftlern und in ostasiatischen Ländern scharf kritisiert. Eine der bekanntesten Kritikpunkte ist die Han-Vereinheitlichung, aus ostasiatischer Sicht werden bei diesem Vorgehen Schriftzeichen verschiedener nicht verwandter Sprachen vereinigt.[21] Die zukünftige Kodierung ägyptischer Hieroglyphen wird ebenfalls kritisiert, da als einzige Quelle die Forschungen Alan Gardiners verwendet wurden[22].
  Der Kodierung des phönizischen Alphabets ging ein langer Streit voraus, da viele Wissenschaftler das Phönizische nach den Kodierungsrichtlinien des Unicode-Konsortiums für eine Glyphenvariante des Hebräischen hielten und deshalb die Kodierung als separates Schriftsystem ablehnten. Der Vorschlag, Phönizisch separat zu kodieren, hat sich jedoch durchgesetzt.[23]
  ↑ a b BabelStone: What's new in Unicode 5.1 ?
  ↑ FAQ - Unicode and ISO 10646
  ↑ Unicode Technical Report #17 - Character Encoding Model
  ↑ a b c d e The Unicode Standard, Chapter 2 - General Structure
  ↑ http://office.microsoft.com/de-de/word/HP030849291031.aspx?pid=CH060842451031
  ↑ Unicode - Alle Schriften der Welt
  ↑ Response to the revised "Final proposal for encoding the Phoenician script in the UCS" (L2/04-141R2)
  RFC 3629 (UTF-8, a transformation format of ISO 10646)
  RFC 3492 (Punycode, für Sonderzeichen in Domainnamen)
  BOCU, MIME-kompatible Unicode-Kompression – engl.
  Joan Aliprand (Hrsg.): The Unicode Standard Version 5.0. Addison Wesley, Boston MA 2007. ISBN 0-321-48091-0
  (Die offizielle Publikation zum Weltstandard – mehr als 1.300 Seiten mit Tabellen, Texten und Hintergrundinformationen für Programmierer, nicht sehr verständlich für Einsteiger)
  Richard Gillam: Unicode Demystified, a practical programmer's guide to the encoding standard. Addison Wesley, Boston MA 2003. ISBN 0-201-70052-2