Björn Klippstein

UTF-8

Klippstein IT Service

Aus 4webmaster.de

Wechseln zu: Navigation, Suche

UTF-8, UTF-16 und UTF-32 sind Kodierungen für Zeichen des Unicode-Zeichensatzes. Der folgende Artikel erläutert die Zusammenhänge. Im Absatz Encoding werden die Kodierungen erläutert.

Unicode

Inhaltsverzeichnis

Herkömmliche Zeichensätze umfassen einen Zeichenvorrat von 256 Zeichen, wie z. B. ISO 8859-1. So viele Zeichen können mit einer Codelänge von 1 Byte unterschieden werden. Der kleinste gemeinsame Nenner aller Zeichensätze ASCII umfasst sogar nur 128 Zeichen. Zu wenig um viele Sprachen im gleichen System darstellen zu können. Schon eine Adressliste von Menschen aus mehreren Ländern bringt ein System, das mit diesen herkömmlichen Zeichensätzen arbeitet, in Probleme. Die herkömmlichen Zeichensätze stehen dem internationalen Datenaustausch oder der Internationalisierung einer Software bzw. einer Website massiv im Weg.

Unicode tritt an, diese Probleme zu lösen. Ziel ist es, allen sinntragenden Zeichen aller bekannten Schriftkulturen und Zeichensysteme einen digitalen Code zuzuordnen und das Problem inkompatibler Kodierungen in unterschiedlichen Ländern oder Kulturkreisen damit zu beseitigen.

Derzeit enthält Unicode etwa 99.000 Zeichen. Seit 1991 fügt das Unicode-Konsortium dem Unicode-System immer weitere Zeichen hinzu. Derzeit wächst der Zeichensatz jährlich um etwa 1000 Zeichen pro Jahr.


Den Code, den ein Zeichen bekommen hat, nennt man Codepoint. Es ist eine Zahl, die meist hexadezimal dargestellt wird. Beispielsweise hat das Eurozeichen den Codepoint 20AC.

Unicode Codepoint Zeichen
Unicode ordnet jedem Zeichen einen Codepoint zu — und umgekehrt

Notation

Jetzt können Sie nicht einfach „20AC“ sagen und jeder erkennt „aha das ist ein Codepoint von Unicode, er repräsentiert das Eurozeichen“. Sie müssen die 20AC also überhaupt erstmal als Unicode-Codepoint kennzeichnen. Das ist die Notation des Codepoints.

  • Eine gebräuchliche Notation von Unicode-Zeichencodes ist hexadezimal mit vorangestelltem U+
  • In HTML und XML können Sie Unicode-Zeichencodes hexadezimal mit vorangestelltem &#x und hintenangestelltem Semikolon notieren
  • Oder wenn Sie lieber im Dezimalsystem arbeiten, dann schreiben Sie &#Dezimalcode;


Notation HTML Codepoint Eurozeichen Repräsentation
Drei alternative Notationen des Eurozeichens

Encoding

Für die interne Repräsentation dieses Codes (zum Speichern, Übertragen, Weiterverarbeiten, etc.) wird der Code encoded, d.h. auf eine Folge von Bytes abgebildet. Es gibt verschiedene Encodings für Unicode. Sie unterscheiden sich

  • in der Kompatibilität zu ASCII
  • im Speicherbedarf und
  • im Rechenaufwand.

Das mit Abstand verbreitetste Encoding für Unicode-Zeichen ist UTF-8. In UTF-8 wird jedem Zeichen eine Bytefolge variabler Länge zugeordnet. Häufige Zeichen lassen sich in einem Byte abbilden, exotische Zeichen brauchen bis zu 4 Bytes. Für Texte mit lateinischen Buchstaben ist UTF-8 das platzsparendste Encoding für Unicode-Zeichen. UTF-8 ist dabei voll abwärtskompatibel zu ASCII, d.h. für einen reinen ASCII-Text macht es keinen Unterschied, ob er ASCII- oder UTF-8-codiert ist.

Weitere Encodings sind z.B. UTF-16, UTF-32 und andere, siehe Encoding-Vergleich in der englischen Wikipedia.

Beispiel:

  • In UTF-8 wird das Eurozeichen mit drei Bytes repräsentiert, und zwar E2 82 AC
  • In UTF-16 wird das Eurozeichen mit zwei Bytes repräsentiert, und zwar 20 AC

Die folgende Grafik soll das Encoding veranschaulichen:

UTF-8 UTF-16 Encoding
Zwei alternative Encodings des Eurozeichens

Übrigens ist auch UTF-16 ein Encodingformat mit variabler Länge. Nicht bei allen Zeichen stimmt die UTF-16-Codierung mit dem Codepoint überein.

Darstellung

Jetzt geht es um die konkrete Darstellung des Zeichens, z.B. auf dem Bildschirm. Dazu muss man zwischen dem Zeichen und seiner Glyphe unterscheiden:

  • Ein Zeichen ist die abstrakte Idee eines Symboles.
  • Eine Glyphe dagegen ist die grafische Darstellung des Symboles.

Kennen Sie jetzt den Unterschied zwischen einem Zeichensatz und einer Schriftart?

  • Ein Zeichensatz  ist (wie der Name eigentlich schon sagt) eine Menge von Zeichen.
  • Eine Schriftart (Font) dagegen ist eine Sammlung von Glyphen.

Der Unicode-Standard codiert Zeichen, keine Glyphen. Wie das Zeichen grafisch dargestellt wird, lässt der Standard offen.

Ein Beispiel: Bis 1945 hat man in Deutschland häufig in Fraktur geschrieben und dabei teilweise völlig andere Glyphen verwendet als heute. Fraktur hat keine eigenen Zeichen, sondern stellt die lateinischen Zeichen nur mit anderen Glyphen dar als heute üblich.
Die Glyphen der Fraktur sind daher nicht in Unicode enthalten — es sei denn, sie haben eine eigenständige Bedeutung, z.B. als mathematisches Symbol. Mitunter wird hart darum gerungen, ob ein bestimmtes Symbol ein Zeichen ist (und aufgenommen wird) oder nur eine Glyphe für ein bereits bestehendes Zeichen (und deswegen nicht aufgenommen wird).

Zur Darstellung eines Zeichens bedarf es also auch noch einer Schriftart. Erst die Schriftart verknüpft ein Unicode-Zeichen mit seiner Darstellung:


Zwei alternative Darstellungen des Eurozeichens

Zusammenspiel

Betrachten wir ein konkretes Beispiel um das Zusammenspiel von Unicode, Encoding und der darstellenden Schriftart zu verdeutlichen: Wie kommt das Eurozeichen auf Ihren Bildschirm?

  1. Am Anfang war die abstrakte Idee des Zeichens in meinem Kopf: Ein Eurozeichen soll auf die Webseite!
  2. Dazu könnte ich den Codepoint nachschlagen, den das Unicode-Consortium für das Eurozeichen festgelegt hat. Er lautet 20AC.
  3. Ich notiere also in HTML:   €
  4. Sie betrachten die Webseite, d.h. ihr Browser liest im Quelltext:    €
  5. Der Browser interpretiert das als Unicode-Codepoint 20AC.
  6. Mit Hilfe einer geeigneten Schriftart erscheint schließlich die Glyphe € auf dem Bildschirm.


Natürlich geht das alles bei einem so verbreiteten Zeichen wie dem Eurozeichen auch einfacher. Ich kann ja das Eurozeichen auch direkt mit der Tastatur erzeugen. Also noch einmal:

  1. Das Zeichen für Euro soll auf die Webseite!
  2. Ich notiere in HTML (mit Hilfe der Eurotaste): €
  3. …und speichere die Webseite im UTF-8-Format ab. In der Datei stehen jetzt die drei Bytes E2 82 AC für das Eurozeichen.
  4. Sie betrachten die Webseite, d.h. Ihr Browser erkennt den Quelltext als UTF-8-encoded und liest dort die drei Bytes E2 82 AC.
  5. Der Browser interpretiert das als Unicode-Codepoint 20AC.
  6. Mit Hilfe einer geeigneten Schriftart erscheint schließlich die Glyphe € auf dem Bildschirm.


Die folgende Grafik stellt diese Zusammenhänge noch einmal allgemein und abstrakt dar:

Unicode UTF-8 Encoding Schriftart

Siehe auch

Weblinks


Dieser Artikel ist ein Originalartikel von 4webmaster.de. Copyright: Björn Klippstein; CC-Lizensierung in Kürze