TU Chemmnitz

Universitätsrechenzentrum

TU Chemnitz > URZ > Zeitung > Ausgabe 2/2004

Unicode - eine neue Art der Zeichenkodierung

Die Darstellung von Textzeichen im Zusammenhang mit der Computertechnik war bisher in allen Betriebssystemen recht inhomogen. Um die Kodierung der Textzeichen zu vereinheitlichen, wurde der Unicode-Standard ISO-10646 entwickelt.
Mit der Umstellung der vom URZ administrierten Linux-Rechner auf Fedora Core 1.0 erfolgt erstmals ein Umstieg auf Unicode im Format UTF-8. Der Artikel beschreibt Vorteile von Unicode, eventuelle Probleme beim Umstieg und Hintergrundinformationen für den interessierten Leser.

Warum eine neue Kodierung?

Die Einführung von Unicode nach ISO-10646 ist in der Computerwelt höchst sinnvoll und längst überfällig. Die bisherigen Kodierungen, d.h., wie die Zeichen zur Verarbeitung computergerecht aufbereitet wurden, waren nicht eineindeutig. Mit Unicode werden nun die unterschiedlichen sprachspezifischen Erweiterungen des bisher meist genutzten ISO8859-Standards und anderer Zeichenstandards durch einen einzigen, allumfassenden Standard ersetzt. Jedes in der Welt vorkommende Zeichen besitzt ein eindeutiges Äquivalent in der Kodierungsvorschrift!

Im Betriebssystem Fedora Core 1 wurde erstmals auf Unicode ISO-10646 im UTF-8-Format umgestellt. Näheres siehe unten. Das bedeutet eine gewisse Vorreiterrolle. Anderere Distributionen wie z.B. SuSE-Linux werden im nächsten Release ebenfalls umsteigen.

Was bedeutet der Wechsel auf Unicode?

Die Umstellung auf eine neue Kodierung erfordert von Betriebssystementwicklern, Anwendungsprogrammierern und Systemadministratoren große Anstrengungen, besonders, um auch die Nutzung von (älteren) in anderer Kodierung gespeicherten Texten zu gewährleisten. Obwohl innerhalb des neuen Systems die Behandlung von Textzeichen problemlos verlaufen sollte, können objektiv nicht alle Fälle behandelt werden.

Betroffen von der neuen Kodierung sind alle die Stellen, wo im Rechner auf Zeichen(ketten) zurückgegriffen wird:

wobei für die gewöhnliche Nutzung besonders die ersten beiden Anstriche von Bedeutung sind.

Kritische Arbeitsweisen entstehen durch die Historie und das Nebeneinanderbestehen alter und neuer Systeme:

Textdateien

Was funktioniert und was nicht, hängt von der Intelligenz der Programme ab, die mit den Daten umgehen:

Dateinamen

Ein Vorteil ist, dass in Linux-/Unix-Systemen der Unicode in UTF-8-Kodierung benutzt wird. Das bedeutet, dass alle ASCII-Zeichen (das sind die Groß- und Kleinbuchstaben, Ziffern, einige Sonderzeichen wie Punkt, Komma, ... , aber nicht die Umlaute) die gleiche Kodierung von 1 Byte Länge besitzen wie bisher in ISO-8859-x!

Innerhalb von Dateinamen führen Nicht-ASCII-Zeichen in der alten ISO8859-Kodierung unweigerlich zu falschen Darstellungen in einem System mit UTF-8-Zeichen und umgekehrt. Eine Umbenennung ist hier unumgänglich.

Wo hole ich mir Rat bei Problemen?

Vertiefende Betrachtungen zur Zeichenbehandlung in Computern

Textzeichenkodierung in Computern

Textzeichen in einer für den Menschen lesbaren Form sind für die Verarbeitung im Computer ungeeignet. Sie müssen deshalb in eine computerverständliche Form gebracht werden. Konkret heißt das, es müssen für alle Textzeichen computerverarbeitbare Äquivalente (Kodes) vereinbart sein. Das gilt sowohl für die interne Verarbeitung im Computer selbst als auch für die Speicherung auf Datenträgern wie Festplatten, Disketten, CD's usw..

Man kann den Weg eines Zeichens vereinfacht so beschreiben:

Bei der Tastatureingabe kommt man durch die begrenzte Anzahl der Tasten um eine sprachabhängige Zuordnung der Tasten zu den Zeichen (genauer: ihrer internen Kodierung) nicht herum.

Die Visualisierung der internen Zeichenkodes auf Bildschirm und Drucker kann man sich vereinfacht so vorstellen, dass auf Grund des internen Kodes ein darstellbares Element aus einer Zeichensatzdatei ausgewählt wird (ggf. unter Hinzufügung von Attributen wie Größe, Farbe, usw.).

Ein zentrales Problem stellt die Kodierung der Textzeichen dar. Leider entstanden mehrere Kodierungsvorschriften, die in unterschiedlichen Standards vereinbart sind und in den verschiedensten Systemen auch verwendet wurden und werden.

Wie wurden Texte bisher kodiert?

Wegen des geringen Leistungsvermögens ehemaliger Computer (Speicherkapazität, Rechengeschwindigkeit,...) hatte sich der Standard ISO8859 durchgesetzt:

Die kleinste Einheit in einem Rechner ist das Bit, dass genau die 2 Zustände "0" oder "1" annehmen kann.  Die kleinste adressierbare Einheit in einem Rechner ist das Byte. Es besteht aus 8 Bit.  Da jedes Bit 2 Zustände einnehmen kann, existieren pro Byte 2*2*2*2*2*2*2*2 = 256 unterschiedliche Kombinationsmöglichkeiten.

Beispiele für die unterschiedlichen Varianten des Standards ISO-8859-n:

Bitkombination ISO-8859-1
westeuropäisch
ISO-8859-5
kyrillisch
ISO8859-7
neugriechisch
ISO-8859-15
Euroland
01100001 kleines "a" kleines "a" kleines "a" kleines "a"
11100100 kleines "ä" kleines russisches "f" kleines griechisches "Delta" kleines "ä"
10100100 allg. Währungssymbol Eurozeichen unbelegt Eurozeichen

Unicode - eine eindeutige Kodierungform von Zeichen

Mit den heute immens gestiegenen Speichergrößen und Verarbeitungsgeschwindigkeiten in Computern kann auf Zeichenkodierungen übergegangen werden, die nicht auf 1 Byte beschränkt sind.

Nach unabhängigen Vorarbeiten entwickeln seit 1991 zwei Gremien (Unicode-Consortium und eine Arbeitsgruppe der ISO) gemeinsam den Standard ISO-10646 für einen universellen Zeichensatz (Universal Character Set - UCS, Synonym: Unicode), der u.a. für j e d e s Zeichen in der Welt einen e i n d e u t i g e n Kode und offiziellen Namen festlegt:

Beispiele für Zeichenkodierungen (Kodes in 2 Bytes dargestellt):

Zeichen offizielle Bezeichnung nach ISO-10646 Bitkombination nach ISO-10646
kleines "a" LATIN SMALL LETTER A 00000000 01100001
kleines "ä" LATIN CAPITAL LETTER A WITH DIAERESIS 00000000 11100100
kleines russisches "f" CYRILLIC SMALL LETTER EF 00000100 01000100
kleines griechisches "Delta" GREEK SMALL LETTER DELTA 00000011 10110100
Eurozeichen EURO SIGN 00100000 10101100

Repräsentationsformen von Unicode

Die mit ISO-10646 festgelegte Kodierung sagt noch nicht aus, wie sie in einem Computer oder auf einem Datenträger abgebildet wird. Die einfachste Form wäre sicherlich, jedes Zeichen in 4 Byte zu kodieren. Das ist aber sehr uneffektiv, da die gebräuchlisten Zeichen unter Weglassen führender "0"-Bits in 1 oder 2 Byte darstellbar sind.

Unicode-Kodierung UTF-8

Aus Effektivitätsgründen (viele Texte bestehen aus Zeichen des ACSII-Zeichensatzes) und der Historie (viele Programme verarbeiten Texte byteweise, bestehende Textdateien sind byteorientiert) wurde als Kodierung Universal Character Set Tranformation Format 8 , kurz UTF-8 , entwickelt.

Kodierungsvorschrift von Unicode in UTF-8:

Um das Prinzip zu erkennen, werden der Übersichtlichkeit halber nur Zeichen mit 16 Bit Länge betrachtet. Das Verfahren ist natürlich auf 32 Bit erweiterbar.

Unicodezeichen
von - bis
Bitfolge in UTF-8
00000000 00000000 - 00000000 01111111 0xxxxxxx
00000000 10000000 - 00000111 11111111 110xxxxx 10xxxxxx
00001000 00000000 - 11111111 11111111 1110xxxx 10xxxxxx 10xxxxxx

xxx sind die Bitpositionen des Unicodes

Beispiele für die Verschlüsselung von Unicode-Zeichen in UTF-8:

Zeichen Bitkombination nach ISO-10646 Darstellung in UTF-8-Kodierung
kleines "a" 00000000 01100001 01100001
kleines "ä" 00000000 11100100 11000010 10000100
kleines russisches "f" 00000100 01000100 11010001 10110100
kleines griechisches "Delta" 00000011 10110100 11001110 10110100
Eurozeichen 00100000 10101100 11100010 10000010 10101100

Kodierung mittels UTF-8 wird in Linux-/Unix-Systemen eingesetzt.

Unicode-Kodierung UTF-16

UTF-16 benutzt als kleinste Einheit 16 Bit. Damit können viele Zeichen aus dem Unicodestandard direkt abgebildet werden. Beanspruchen Textzeichen mehr als 16 Bits, werden dafür Kombinationen aus 2x2 Bytes genutzt.

"Die meisten Windows-Oberflächen verwenden UTF-16" (lt. Hilfe- und Supportcenter von Microsoft). UTF-16 wird auch in Java genutzt.

Unicode-Kodierung UTF-32

Die Repräsentation von Unicode in 32 Bit ist definiert, aber ein Anwendungsfall ist zumindest dem Autor noch nicht bekannt.

Weitere Informationsquellen:



Gerd Heide, April 2004