In dem dritten Teil der Reihe „Zeichenkodierung“ geht es um Unicode.
Die Zeichenkodierung „Unicode“
Unicode ist ein internationaler Standard, in dem alle Schriftzeichen und Textelemente aller bekannten Schriftkulturen und Zeichensysteme digital festlegt werden. Bei Unicode existieren zwei Zuordnungsmethoden: das Unicode Transformation Format (UTF) und die Universal Coded Character Set (UCS).
Seit der Unicode Version 4.0 von 2011 sind beide Standards (UTF, UCS) hinsichtlich der Kodierungen deckungsgleich. Deshalb wird im folgenden Teil ausschließlich auf UTF eingegangen.
UTF (Unicode Transformation Format)
Mit dieser Kodierung sind je Format 1.114.112 Zeichen (Codepoints) darstellbar. Die verschieden UFT-Formate und deren Eckdaten stellt die folgende Tabelle dar:
|
UTF-8 |
UTF-16 |
UTF-32 |
Anzahl Bits |
8 Bit |
16 Bit |
32 Bit |
Anzahl Bytes je Zeichen |
1 Byte bis 4 Byte
(variable Byte-Anzahl) |
2 Bytes |
4 Bytes |
max. Anzahl Zeichen |
256 |
65.536 |
4.294.967.296 |
BOM |
optional |
UTF-16LE
UTF-16BE |
UTF-32LE
UTF-32BE |
Anmerkung |
Die ersten 128 Zeichen stimmen mit dem ASCII-Zeichensatz überein.
Diese werden mit einem Byte kodiert. |
|
|
Ein Vorteil von UTF ist, dass eine verlustfreie Umwandlung von einem zum anderen Format möglich ist.
Bei Unicode existieren zwei Wege, die Informationen zu speichern. Exemplarisch wird der Text “Hallo” verwendet, daraus ergeben sich zwei Varianten, je nachdem, wie die Bytes angeordnet werden.
Text |
H |
a |
l |
l |
o |
Hexadezimal |
00 48 |
00 61 |
00 6C |
00 6C |
00 6F |
Hexadezimal |
48 00 |
61 00 |
6C 00 |
6C 00 |
6F 00 |
Die Unterscheidung wird durch das Byte Order Mark vorgenommen.
BOM (Byte Order Mark)
Das Byte Order Mark gibt an, welche Variante für die Kodierung eines Textes angewendet wird. Dadurch kann bei der Verarbeitung von Dateien mit unterschiedlichen Programmen eine Unterscheidung erfolgen. Bei den Kodierungen UTF-16 und UTF-32 muss die BOM-Byte-Reihenfolge angegeben werden, bei UTF-8 ist die Angabe optional.
Kodierung |
hexadezimale Darstellung |
UTF-8 |
EF BB BF |
UTF-16 (BE) |
FE FF |
UTF-16 (LE) |
FF FE |
UTF-32 (BE) |
00 00 FE FF |
UTF-32 (LE) |
00 00 FE FF |
Es wird zwischen Little Endian (LE) und Big Endian (BE) unterschieden.
Byte Order Mark |
Beispiel |
Beschreibung |
Little Endian (LE) |
Tag.Monat.Jahr |
Bei Little Endian wird das kleinstwertige Byte zuerst genannt. |
Big Endian (BE) |
Jahr.Monat.Tag |
Bei Big Endian wird das höchstwertige Byte zuerst genannt. |
Codepoint
Die Position eines Zeichens in einem Zeichensatz ist der sog. Codepoint („Codeposition“). Im Unicode-Standard werden die Zeichen in einem festgelegten Format adressiert.
U+xxxx
Das “U” steht dabei für Unicode und “xxxx” steht für eine hexadezimale Darstellung eines Zeichens. Beispielsweise kann das Euro “€” Zeichen mit dem Codepoint
U+20AC
angesprochen werden. Eine Darstellung des Zeichens auf einer Webseite stellt sich wie folgt dar:
€
Eine Übersicht aller Zeichen ist unter ascii-table.com/unicode.php zu finden.
Vorherige Teile:
Zeichenkodierung – Grundlagen und ASCII (Teil 1)
Zeichenkodierung – ANSI (Teil 2)