Unicode - universeller Zeichensatz
Der internationale Standard ISO 10646 definiert den Universal Character Set
(UCS). UCS enthält sämtliche Zeichen aller anderen
Zeichensatz-Standards. Er garantiert auch »round-trip
compatibility«; mit anderen Worten können Konvertierungstabellen
so erstellt werden, dass beim Konvertieren einer Zeichenkette zwischen einer
anderen Kodierung und UCS keinerlei Information verlorengeht.
Mit den in UCS enthaltenen Zeichen können praktisch alle bekannten
Sprachen dargestellt werden. Dies umfasst nicht nur die lateinische,
griechische, kyrillische, hebräische, arabische, armenische und
georgische Schrift, sondern auch chinesische, japanische und koreanische
Han-Ideogramme sowie Schriften wie Hiragana, Katakana, Hangul, Devanagari,
Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, Thai,
Lao, Khmer, Bopomofo, Tibetisch, Runen, Äthiopisch, Canadian Syllabics
(für die Sprachen kanadischer Ureinwohner), Cherokee, Mongolisch,
Ogham, Birmanisch, Sinhala, Thaana, Yi und andere. Für noch nicht
abgedeckte Schriften wird weiter daran geforscht, wie sie am besten für
Computernutzung kodiert werden. Eines Tages werden auch sie aufgenommen
werden. Dazu könnten nicht nur Hieroglyphen und verschiedene
historische indoeuropäische Sprachen gehören, sondern auch
einige ausgewählte Kunstsprachen wie Tengwar, Cirth und Klingonisch.
UCS umfasst auch eine große Anzahl von grafischen, typografischen,
mathematischen und wissenschaftlichen Symbolen, einschließlich den von
TeX, PostScript, APL, MS-DOS, MS-Windows, Macintosh, OCR-Schriften zur
Verfügung gestellten, ebenso wie die Schriften vieler
Textverarbeitungs- und Publishing-Systeme. Und es kommen weitere hinzu.
Der UCS-Standard (ISO 10646) beschreibt eine 31-Bit-Zeichensatzarchitektur. Sie
besteht aus 128 24-Bit-
Gruppen, die jeweils in 256 16-Bit-
Ebenen aus 256 8-Bit-
Reihen mit 256
Spalten (eine
für jedes Zeichen) aufgeteilt sind. Teil 1 der Norm (ISO 10646-1)
definiert die ersten 65534 Code-Positionen (0x0000 bis 0xfffd), welche die
Basic Multilingual Plane (BMP) bilden, also Ebene 0 in der Gruppe 0.
Teil 2 der Norm (ISO 10646-2) fügt der Gruppe 0 Zeichen
außerhalb der BMP in mehreren
ergänzenden Ebenen im
Bereich 0x10000 bis 0x10ffff zu. Es ist nicht geplant, der Norm Zeichen
jenseits von 0x10ffff hinzuzufügen. Damit wird in absehbarer Zukunft
aus dem gesamten Code-Raum nur ein kleiner Teil der Gruppe 0
tatsächlich verwendet werden. Die BMP enthält alle Zeichen
anderer häufig verwendeter Zeichensätze. Die
Ergänzungsebenen nach ISO 10646-2 decken nur eher exotische Zeichen
für spezielle Anforderungen in der Wissenschaft, dem Druck von
Wörterbüchern, dem Verlagswesen und übergeordneten
Protokollen sowie von Enthusiasten ab.
Die Darstellung jedes einzelnen UCS-Zeichens als 2-Byte-Wort wird als die
UCS-2-Form (nur für BMP-Zeichen) bezeichnet, während UCS-4 die
einzelnen Zeichen durch ein 4-Byte-Wort darstellt. Darüber hinaus gibt
es die zwei Codierungsformen UTF-8 für
Abwärtskompatibilität mit ASCII-Software und UTF-16 für
die abwärtskompatible Bearbeitung von Nicht-BMP-Zeichen bis 0x10FFFF
durch UCS-2-Software.
Die UCS-Zeichen 0x0000 bis 0x007f sind mit denen des klassischen
US-ASCII-Zeichensatzes und die Zeichen im Bereich von 0x0000 bis 0x00ff mit
denen des ISO-8859-1-Latin-1-Zeichensatzes identisch.
Einige Code-Punkte von UCS wurden sogenannten
Kombinationszeichen
(combining characters) zugewiesen. Sie sind mit den Akzenttasten auf
Schreibmaschinen vergleichbar, bei denen sich die Schreibposition nicht
verändert. Ein Kombinationszeichen fügt dem vorhergehenden
Zeichen einfach einen Akzent hinzu. Den wichtigsten Zeichen mit Akzenten
wurden eigene Codes im UCS zugewiesen. Mit dem Mechanismus der
Kombinationszeichen können Akzente und andere diakritische Markierungen
zu jedem beliebigen Zeichen hinzugefügt werden. Kombinationszeichen
folgen immer dem Zeichen, das sie verändern. Zum Beispiel kann das
deutsche »Ä« (oder »Latin capital letter A with
diaeresis«) entweder durch den festen UCS-Code 0x00c4 oder alternativ
als Kombination des normalen »A« (»Latin capital letter
A«) gefolgt vom Kombinationszeichen für »doppelt
gepunktet« (combining diaeresis) als 0x0041 0x0308 dargestellt werden.
Kombinationszeichen sind wesentlich zum Beispiel für die Codierung der
Thai-Schrift, für den Satz mathematischer Formeln und Nutzer der
internationalen Lautschrift.
Da nicht erwartet wird, dass alle Systeme komplexere Mechanismen wie
Kombinationszeichen unterstützen, beschreibt ISO 10646 die folgenden
drei
Implementierungsstufen für UCS:
- Stufe 1
- Kombinationszeichen und Hangul-Jamo (eine
Kodierungsvariante der koreanischen Schrift, in der Zeichen für
Hangul-Silben als zwei- oder dreistellige Vokal-/Konsonanten-Kombinationen
codiert werden) werden nicht unterstützt.
- Stufe 2
- Zusätzlich zu Stufe 1 sind Kombinationszeichen jetzt
für einige Sprachen, in denen sie unerlässlich sind (z. B.
Thai, Lao, Hebräisch, Arabisch, Devanagari, Malayalam)
erlaubt.
- Stufe 3
- Alle UCS-Zeichen werden unterstützt.
Der vom Unicode Consortium veröffentlichte Standard Unicode 3.0
enthält genau die »UCS Basic Multilingual Plane« auf der
Implementierungsstufe 3, wie in ISO 10646-1:2000 beschrieben. Unicode 3.1
fügte die zusätzlichen Ebenen von ISO 10646-2 hinzu. Der
Unicode-Standard und vom Unicode Consortium veröffentlichte technische
Berichte bieten viele zusätzliche Informationen über die
Semantik und die empfohlene Verwendung der verschiedenen Zeichen. Sie geben
Richtlinien und Algorithmen für die Bearbeitung, das Sortieren,
Vergleichen, Normalisieren, Umwandeln und Anzeigen von Unicode-Zeichenketten.
Unter GNU/Linux ist der C-Datentyp
wchar_t ein vorzeichenbehafteter
32-Bit-Ganzzahl-Typ. Seine Werte werden von der C-Bibliothek immer (in allen
Locales) als UCS-Codewerte interpretiert. Diese Konvention signalisiert die
GNU-C-Bibliothek Anwendungen durch die Definition der Konstante
__STDC_ISO_10646__, wie es im ISO-C99-Standard spezifiziert ist.
UCS/Unicode in der ASCII-kompatiblen UTF-8-Multibyte-Codierung kann wie ASCII in
Ein-/Ausgabe-Datenströmen, zur Terminal-Kommunikation, in
Klartext-Dateien, Dateinamen und Umgebungsvariablen verwendet werden. Um allen
Anwendungen die Verwendung von UTF-8 als Zeichencodierung bekannt zu geben,
muss mittels Umgebungsvariablen (z.B. »LANG=en_GB.UTF-8«) eine
geeignete
Locale festgelegt werden.
Die Funktion
nl_langinfo(CODESET) gibt den Namen der ausgewählten
Codierung zurück. Mit Bibliotheksfunktionen wie
wctomb(3) und
mbsrtowcs(3) können die internen
wchar_t-Zeichen und
Zeichenketten in die System-Zeichenkodierung konvertiert werden (und auch
wieder zurück).
wcwidth(3) gibt an, wie viele Positionen
(0…2) der Cursor durch die Ausgabe eines Zeichens weitergesetzt wird.
In der »Basic Multilingual Plane« werden dem Bereich 0xe000 bis
0xf8ff niemals Zeichen vom Standard zugewiesen werden - er ist für
private Nutzung reserviert. Für die Linux-Gemeinde wurde dieser
Privatbereich weiter unterteilt in den Bereich 0xe000 bis 0xefff, der vom
Endbenutzer individuell benutzt werden kann, und den Linux-Bereich von 0xf000
bis 0xf8ff, in dem koordiniert gemeinsame Erweiterungen aller Linux-Benutzer
abgelegt werden. Die Registrierung der der Linux-Zone zugeordneten Zeichen
wird von LANANA betreut und die Registrierung selbst befindet sich in
Documentation/admin-guide/unicode.rst in den Linux-Kernelquellen (oder
Documentation/unicode.txt vor Linux 4.10).
Zwei weitere Ebenen sind für die private Nutzung reserviert: Ebene 16
(»Supplementary Private Use Area-A«, Bereich 0xf0000 bis
0xffffd) und Ebene 16 (»Supplementary Private Use Area-B«,
Bereich 0x100000 bis 0x10fffd).
- •
- Information technology – Universal Multiple-Octet
Coded Character Set (UCS) – Part 1: Architecture and Basic
Multilingual Plane. Internationale Norm ISO/IEC 10646-1, International
Organization for Standardization, Genf, 2000.
- Dies ist die offizielle UCS-Spezifikation. Verfügbar
unter
http://www.iso.ch/
- •
- The Unicode Standard, Version 3.0. The Unicode Consortium,
Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.
- •
- S. Harbison, G. Steele. C: A Reference Manual. Fourth
edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.
- Ein gutes Fachbuch über die Programmiersprache C.
Die vierte Auflage behandelt jetzt auch den Nachtrag (Amendment) 1 von
1994 zum ISO-C-Standard (ISO/IEC 9899:1990), der eine große Anzahl
neuer C-Bibliotheksfunktionen zum Umgang mit Zeichensätzen von mehr
als 8 Bit pro Zeichen hinzufügt. Das Buch behandelt aber noch nicht
ISO-C99-Standard, welcher die Unterstützung von Multibyte-Zeichen
weiter verbesserte.
- •
- Technische Unicode-Berichte
- •
- Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
- •
- Bruno Haible: Unicode HOWTO
locale(1),
setlocale(3),
charsets(7),
utf-8(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Johnny
Teveßen <
[email protected]> und Martin Eberhard Schauer
<
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer