Altlasten im Unicode

Damit bestehende Zeichensätze wie die Latin-Familie, aber auch asiatische Systeme sinnvoll übernommen werden und einfach konvertiert werden konnten, wurden sie als Ganzes in den Standard übernommen. So entsprechen die ersten 256 Zeichen im Unicode-Standard exakt dem Standard ISO/IEC 8859-1, besser bekannt als Latin-1.

Stellenmarkt
  1. IT-Systemadministrator / User Support (m/w/d)
    Mainsite GmbH & Co. KG, Erlenbach
  2. Workday Security Administrator (München oder Remote) (m/w/d)
    Hays AG, München, remote
Detailsuche

Dies führt stellenweise zu doppelten Zeichen im Unicode-Standard und auch Zeichen wie dem Ä, das eigentlich ein zusammengesetztes Zeichen ist und als solches nach den heutigen Kriterien wohl nicht in den Standard aufgenommen würde. Die meisten dieser Zeichensätze sind in der Basic Multilingual Plane gelandet.

Im Standard selbst mag dies zu einigen Problemen geführt haben und wie ein Makel wirken. Aber es war eine pragmatische Entscheidung, welche die Umstellung auf Unicode vereinfachen sollte.

Im Reich der Codierungen

Um ein Unicode-Zeichen zu codieren, existieren unterschiedliche Unicode-Codierungen, sogenannte Unicode Transformation Formats (UTF). Sie unterscheiden sich grob in Codierungen mit fester Länge wie UTF-32 und Codierungen variabler Länge wie UTF-8.

Golem Karrierewelt
  1. C++ Programmierung Grundlagen (keine Vorkenntnisse benötigt): virtueller Drei-Tage-Workshop
    01.-03.08.2022, virtuell
  2. First Response auf Security Incidents: Ein-Tages-Workshop
    14.11.2022, Virtuell
Weitere IT-Trainings

Im Standard existieren drei Ausprägungen dieser UTFs: UTF-8, UTF-16 und UTF-32. Die Zahl gibt die Minimalbits an, die zur Codierung eines Zeichens benötigt werden. Auch wenn dies historisch betrachtet nicht immer der Fall war, da es Codierungen wie UTF-1 oder UTF-7 gab.

Bei Buchstaben aus dem ASCII-Zeichensatz benötigt ein Zeichen in der Codierung UTF-8 ein Byte, kann aber bis zu 4 Byte beanspruchen, je nachdem, auf welches Unicode-Zeichen verwiesen werden soll. Somit können alle Zeichen des Unicode-Standards entsprechend kodiert werden. Werden nur ASCII-Zeichen genutzt, so ist diese Codierung kompatibel mit ASCII.

Die Geschichte von UTF-8 ist eng mit der des Betriebssystems Plan-9 verbunden, das in den 80er-Jahren in den Bell Laboratories entwickelt wurde. Die ursprüngliche Umsetzung sah vor, 16-Bit breite Zeichen in Plan 9 zu nutzen. Allerdings waren die Entwickler damit unzufrieden.

Ein Anruf von IBM zu einem bevorstehenden Meeting des X/Open-Komitees führte dazu, dass Rob Pike und Ken Thompson an einem Mittwochabend die UTF-8-Codierung entwickelten und Plan 9 von Mittwoch zu Freitag auf UTF-8 umstellten. Nach einem weiteren Anruf beim X/Open-Komitee und dem Eingeständnis, dass der Vorschlag von Pike und Thompson wesentlich besser war als der eigene, begann der Siegeszug von UTF-8.

Doch wie wird das Ganze technisch gelöst? Da es sich bei ASCII um eine 7-Bit-Codierung handelt, wird das Bit mit dem Index 7 nicht genutzt. Es ist immer Null. So wäre das Zeichen F wie folgt kodiert:


[0 1 0 0 0 1 1 0]
 7 6 5 4 3 2 1 0

Dieser Umstand wird nun für UTF-8 genutzt. Ist das Bit (Index 7) Null, handelt es sich um ein ASCII-Zeichen; ist es Eins, liegt eine UTF-8 Codierung vor. Das Zeichen Ä (196) sähe in der UTF-8-Codierung wie folgt aus:


[11 00 00 11] [10 00 01 00]

Die Bitfolge 11 im ersten Byte zeigt dabei an, dass es sich um das Startbyte des Zeichens handelt. Die Anzahl der Einsen am Anfang gibt hierbei an, wie viele Bytes für ein Zeichen folgen. Das Yen-Zeichen ¥ würde in UTF-8 wie folgt kodiert werden:


[11 10 11 11] [10 11 11 11] [10 10 01 01]

Hier zeigt das Startbyte drei Einsen am Anfang. Damit ist klar, dass dieses Zeichen in drei Byte kodiert wird. Die folgenden Bytes sind die sogenannten Folgebytes und sind an der Bitfolge 10 am Anfang zu erkennen.

Nach den aktuellen Unicode-Regeln darf ein UTF-8-Zeichen maximal 4 Byte in Anspruch nehmen, auch wenn die Art der Codierung in der Theorie mehr Bytes nutzen könnte. Zu den jeweiligen Codierungen zählen weiterhin bestimmte Feinheiten, die im Rahmen dieses Artikels nicht im Detail besprochen werden sollen, da sie für das Grundprinzip der Codierung unerheblich sind.

So dürfen unter anderem bestimmte Bitfolgen nicht genutzt werden, da sie im Rahmen der UTF-8 Codierung als ungültig angesehen werden. Ein Vorteil dieser Codierung ist, dass immer klar ist, wo ein neues Zeichen beginnt und daher defekte Daten in der UTF-8-Codierung problemlos übersprungen werden können.

Bei UTF-16 wird ein Zeichen durch 16 Bit abgebildet, wenn es sich um ein Zeichen aus der Basic Multilingual Plane handelt. Bei Codierungen außerhalb der BMP werden jeweils zwei 16-Bit-Pärchen genutzt. Dies sollte allerdings nicht mit der UTF-32 Codierung verwechselt werden, da es sich trotzdem um zwei UTF-16-codierte Entitäten handelt.

Was sind UCS-2 und UCS-4?

UTF-32 kodiert jeden Code Point immer in vier Byte und stellt damit die speicherintensivste Codierung dar. In gewissem Rahmen, mit Ausnahme zusammengesetzter Zeichen, bietet sie einen wahlfreien Zugriff auf die Zeichen einer Zeichenkette an. Damit kann auf Zeichen innerhalb der Zeichenkette zugegriffen werden, indem ihre Position berechnet wird, anstatt die komplette Zeichenkette von Anfang an decodieren zu müssen.

Im Zusammenhang mit den Codierungen fallen gelegentlich auch die Begriffe UCS-2 und UCS-4. Bei UCS-2 handelt es sich um eine obsolete Codierung, die nur die Code Points der Basic Multilingual Plane codieren konnte. UCS-4 hingegen ist gleichbedeutend mit UTF-32. Die Bezeichnung "UCS" kommt vom Universal Coded Character Set aus der Norm ISO/IEC 10646.

Die Golem-PCs bei Dubaro

Daneben gibt es Codierungen wie UTF-EBCDIC, die dafür gedacht waren, Unicode auf Mainframe-Rechnern, die mit der EBCDIC-Codierung arbeiten, zu bringen. In der Praxis wird auf solchen Systemen, wie z/OS, aber meist UTF-16 genutzt.

Der Unterschied zwischen Codierungen fester und variabler Breite liegt im Aufwand, die Codierung auszuwerten. Bei den Codierungen variabler Breiten muss ein entsprechender Rechenaufwand in das Lesen der Codierungen gesteckt werden. Der entfällt bei Codierungen fester Breite, allerdings ist hier der Speicherbedarf höher als bei den Codierungen variabler Breite.

Byte Order Mark

Doch wie wird erkannt, in welcher Codierung ein Dokument vorliegt? Dafür existiert das Byte Order Mark, kurz BOM. Es steht am Anfang einer Datei und teilt die genutzte Codierung mit.

Für UTF-8 haben viele ein solches BOM sicherlich schon einmal gesehen:




Als hexadezimale Repräsentation sieht es wie folgt aus:


EF BB BF

Bei den UTF-16- und UTF-32-Codierungen muss die Endianness, also die Reihenfolge der Bytes, berücksichtigt werden. Dies wird mit dem Byte Order Mark, wie der Name schon andeutet, bewerkstelligt. Ein Beispiel eines UTF-16 BOM:


 FE FF (Big Endian)
 FF FE (Little Endian)

Die Nutzung des Byte Order Mark ist optional. Ist keines gesetzt, wird automatisch davon ausgegangen, dass die Byte-Reihenfolge Big-Endian ist.

ISO und Unicode

Mit dem Standard ISO/IEC 10646, dem Universal Coded Character Set, sind die Zeichen des Unicodes auch in einem ISO-Standard verewigt. Mittlerweile werden der ISO-Standard und Unicode synchronisiert; das bedeutet, sie definieren die gleichen Zeichen.

Allerdings existieren Unterschiede zwischen diesem Standard und Unicode. Während die Namen und Code Points in beiden gleich sind, spezifiziert der Unicode-Standard Regeln zur Interoperabilität und liefert weitere Dinge wie entsprechende Algorithmen mit. Im Vergleich dazu stellt der ISO-Standard nur eine Zeichentabelle dar.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Wie Unicode entstand und funktioniertSo wird Unicode aktuell genutzt 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7.  


Hugie 30. Mär 2022 / Themenstart

Aach.. hier hat doch niemand Pointer auf Integer gecastet... sowas würden wir nie tun...

LASERwalker 28. Mär 2022 / Themenstart

Ich muss deinen Titel korrigieren: Nicht Unicode ist kompliziert, die menschliche Sprache...

strohkoenig 28. Mär 2022 / Themenstart

Wenn ich den Artikel richtig verstanden habe, dann sind die Planes Exx und Fxx für...

maxule 28. Mär 2022 / Themenstart

Das konnten Platten von Seagate* schon seit Jahrzehnten. "Sie geht, oder sie geht...

Kommentieren



Aktuell auf der Startseite von Golem.de
Cloud Cam
Amazon macht eigene Überwachungskamera unbrauchbar

Eine fünf Jahre alte Überwachungskamera wird noch dieses Jahr von Amazon außer Betrieb genommen. Kunden erhalten Ersatz, der vielen aber nichts nützt.

Cloud Cam: Amazon macht eigene Überwachungskamera unbrauchbar
Artikel
  1. 30 Jahre Alone in the Dark: Als der Horror filmreif wurde
    30 Jahre Alone in the Dark
    Als der Horror filmreif wurde

    Alone in the Dark feiert Geburtstag. Das Horrorspiel war ein Meilenstein bei der filmreifen Inszenierung von Games. Wie spielt es sich heute?
    Von Andreas Altenheimer

  2. Deutsche Telekom: Spezieller Smartphone-Tarif für Flüchtlinge aus der Ukraine
    Deutsche Telekom
    Spezieller Smartphone-Tarif für Flüchtlinge aus der Ukraine

    Wenn Flüchtlinge aus der Ukraine eine kostenlose SIM-Karte der Deutschen Telekom nutzen, können sie bald in den neuen Tarif wechseln.

  3. Update-Installation dauert: Störungen bei Kartenzahlungen im Einzelhandel bleiben
    Update-Installation dauert
    Störungen bei Kartenzahlungen im Einzelhandel bleiben

    Es gibt ein Update, um die Zahlungsstörungen mit Giro- oder Kreditkarte zu beseitigen. Die Verteilung des Updates braucht aber noch Zeit.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Alternate (ASUS VG30VQL1A QHD/200 Hz 329€ statt 399,90€ im Vergleich) • Apple iPhone 12 128 GB 669€ statt 699€ im Vergleich• Prime Video: Filme leihen für 0,99€ • Gigabyte RTX 3080 12 GB ab 1.024€ • Mindstar (u. a. MSI MPG X570 Gaming Plus 119€ statt 158,90€ im Vergleich) [Werbung]
    •  /