UTF für die Westentasche

Ein Vorwort oder was kommt nach ASCII

Ursprünglich wurden Zeichen im sogenannten ASCII (American Standard Code for Information Interchange) Format kodiert. Bei diesem Format werden sieben Bit für die Zeichenkodierung genutzt. Damit kann man 128 Zeichen darstellen. Das waren ursprünglich die Zeichen: ␣!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{|}~. Die Zeichen umfassen das lateinische Alphabet in Groß- und Kleinschreibung, die zehn arabischen Ziffern sowie einige Satz- und Steuerzeichen (die ersten 32 Zeichen).
Quelle: Wikipedia - ASCII

Für die englische Sprache war dies ausreichend. Jedoch gibt es in anderen Sprachen auch Sonderzeichen. In Deutschland wären das zum Beispiel die Umlaute und das ß. Deswegen wurde das sieben Bit ASCII auf acht Bit erweiter. Damit konnten dann 256 Zeichen kodiert werden. Wobei die unteren Bits dem ursprünglichen ASCII Code entsprechen. Aber selbst das reicht nicht aus, um alle existierenen Schriftzeichen zu kodieren. Deshalb wurden sogenannte Codepages definiert. Diese Codepages definierten die Zeichen 128 bis 256 unter anderem länderspezifisch. Wer noch DOS kennt, kann sich bestimmt noch an die Datei config.sys erinnern, in der man die Codepage für das System festlegen konnte. Das hat natürlich dazu geführt, dass eine Datei, die auf einem System mit einer anderen Codepage erstellt wurde, auf System mit einer anderen Codepage Hyroglyphen enthielt. Man kann sich bestimmt noch an die Rahmenzeichen erinnern, die dann in manchen Texten aufgetaucht sind, anstatt der deutschen Umlaute.

Dies war natürlich kein befriedigender Zustand. Deshalb hat man eine Zeichenkodierung entwickelt, mit der man alle existierenden Schriftzeichen abbilden kann. Dies Kodierung wurde unter dem Namen Unicode bzw. der Abkürzung UTF (Unicode Transformation Format) bekannt.

Für die Repräsentation der Unicode-Zeichen zum Zweck der elektronischen Datenverarbeitung gibt es verschiedene Transformationsformate. In jedem der Formate lassen sich alle 1.114.112 im Unicode-Standard enthaltenen Zeichen (Codepoints) darstellen. Auch lässt sich jedes dieser Formate verlustfrei in ein anderes UTF-Format konvertieren.
Die verschiedenen Formate unterscheiden sich hinsichtlich deren Platzbedarf auf Speichermedien (Speichereffizienz), dem Kodierungs- und Dekodierungsaufwand (Laufzeitverhalten) sowie in ihrer Kompatibilität zu anderen (älteren) Kodierungsarten, zum Beispiel ASCII. Während beispielsweise einige Formate sehr effizienten Zugriff (wahlfreier Zugriff) auf einzelne Zeichen innerhalb der Zeichenkette erlauben, gehen andere sparsam mit Speicherplatz um.
Quelle: Wikipedia - UTF

Unicode / UTF

UTF-8

Bei UTF-8 werden Zeichen mit einer variablen Anzahl von Bytes kodiert. Das heißt ein Zeichen kann mit einem, mit zwei oder mehr Bytes kodiert werden. Dabei gelten folgende Regeln:

Beispiel: 110xxxxx 10xxxxxx oder 1110xxxx 10xxxxxx 10xxxxxx.

UTF-16

UTF-16 ist von den drei Unicode Kodierungen die komplizierteste. Bei UTF-16 kann man zwei Bereiche unterscheiden. Der erste Bereich ist der 16-Bit Bereich, die sogenannte Basic multilingual plane (BMP), in dem die Zeichen direkt kodiert sind. Dieser beinhaltet die am häufigsten genutzen Zeichen. Innerhalb dieses Bereiches gibt es einen zweiten, reservierten Bereich. In diesem reservierten Bereich werden einzelne Zeichen mit mit zwei mal 16-Bit, also zwei Ersatzzeichen definiert. Nehmen wir die Zeichenfolge abc, wobei bei b nicht im direkt kodierten 16-Bit Bereich liegt. Diese Zeichenfolge wird nun mit axyc kodiert, wobei xy zwei Zeichen innerhalb dieses reservierten Bereiches sind.

Die Abbildung erfolgt laut Wikipedia wie folgt:

Von der Nummer des Zeichens wird zunächst die Zahl 65536 (10000hex) abgezogen, wodurch eine 20-Bit-Zahl im Bereich von 00000hex bis FFFFFhex entsteht, die anschließend in zwei Blöcke zu je 10 Bit aufgeteilt und dem ersten Block die Bitfolge 110110, dem zweiten Block dagegen die Bitfolge 110111 vorangestellt wird. Das erste der beiden so entstandenen 16-Bit-Wörter bezeichnet man als High-Surrogate, das zweite als Low-Surrogate, und ihren Namen entsprechend enthält das High-Surrogate die 10 höherwertigen, das Low-Surrogate die 10 niederwertigen Bits des um 65536 verringerten ursprünglichen Zeichencodes. Der Codebereich von U+D800 bis U+DBFF (High-Surrogates) und der Bereich von U+DC00 bis U+DFFF (Low-Surrogates) ist speziell für solche UTF-16-Ersatzzeichen reserviert und enthält daher keine eigenständigen Zeichen.

UTF-32

UTF-32 ist leicht. Es werden einfach alle Zeichen mit vier Byte kodiert - analog zu ASCII, wo jedes Zeichen mit einem Byte kodiert wurde.

BOM

Bei den Kodierungen UTF-16 und UTF-32 muss die Byte-Reihenfolge angegeben werden, da die Zeichen jeweils mindestens entweder in 16 oder 32 Bit großen Werten kodiert sind und damit mehrere Bytes benötigen. Das Byte Order Mark kennzeichnet dabei, in welcher Reihenfolge die Bytes ausgewertet werden müssen. Diese Markierung wird immer dann besonders wichtig, wenn Daten zwischen unterschiedlichen Systemen ausgetauscht werden.
Quelle: Wikipeia - Byte Order Mark

2010-12-29T23:44:56 +0100, mail+homepage[at]michael-puff.de