Unicode Transformation Format

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von UCS Transformation Format)
Wechseln zu: Navigation, Suche

Ein Unicode Transformation Format, auch UCS Transformation Format, abgekürzt UTF, ist eine Methode, Unicode-Zeichen auf Folgen von Bytes abzubilden.

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. Daher ist bei der Auswahl eines bestimmten Unicode-Transformationsformats das für das vorgesehene Anwendungsgebiet geeignetste zu bestimmen.

UTF-8, UTF-16 und UTF-32[Bearbeiten]

  • UTF-32 kodiert ein Zeichen immer in genau 32 Bit und ist damit am einfachsten, da keine variable Zeichenlänge benutzt wird und kein intelligenter Algorithmus benötigt wird, allerdings auf Kosten der Speichergröße – werden nur Zeichen des ASCII-Zeichensatzes verwendet, wird viermal so viel Speicherplatz benötigt wie bei einer Kodierung in ASCII. Je nach Abfolge der Bytes, ob zuerst das niederwertigste oder das höchstwertige Byte übertragen wird, spricht man von Little Endian (UTF-32LE) oder Big Endian (UTF-32BE).
  • UTF-16 ist das älteste Kodierungsverfahren, bei dem ein oder zwei 16-Bit-Einheiten (2 oder 4 Bytes) zur Kodierung eines Zeichens verwendet werden. Auch hier unterscheidet man je nach Abfolge der Bytes zwischen dem häufigeren UTF-16LE und UTF-16BE. Für Sprachen mit nicht-lateinischen Zeichen ist dies die platzsparende Variante, da sie üblicherweise mit 2 Byte auskommen.
  • UTF-8 kodiert Zeichen mit variabler Byte-Anzahl. Dabei wird ein Unicodezeichen in 1 bis 4 Bytes kodiert. Die Codepoints 0 bis 127, die dem ASCII-Zeichensatz entsprechen, werden in einem Byte kodiert, wobei das höchstwertige Bit stets 0 ist. Mithilfe des achten Bits kann ein längeres Unicode-Zeichen eingeleitet werden, was sich auf 2, 3 oder 4 Byte erstreckt. Damit wird bei auf dem lateinischen Alphabet basierenden Schriften am effizientesten mit dem Speicherplatz umgegangen. Bei Schriften ohne lateinische Zeichen werden jedoch meist 3 Byte benötigt und damit mehr als bei UTF-16.

Alle Standards können mit oder ohne eindeutiger Signatur zu Beginn übertragen oder gespeichert werden, der Byte Order Mark (BOM). Vor allem bei der Bearbeitung von Dateien mit unterschiedlichen Programmen und auf unterschiedlichen Systemen hilft die BOM bei der richtigen Identifizierung. Ist alles vorher eindeutig definiert oder wird die Information anders übertragen (etwa durch „charset“ bei HTML), so wird sie weggelassen.

Beispiele[Bearbeiten]

Als Beispiel der Begriff „Veränderung“ in verschiedenen Sprachen / Schriftsätzen und Kodierungen, wie in einem Hex-Editor. Vorangestellt der ISO-Sprachcode und ein Doppelpunkt, wie es auch bei den Interwikilinks in den Artikeln hier verwendet wird.

de:Veränderung
64 00 00 00|65 00 00 00|3A 00 00 00|56 00 00 00|65 00 00 00|72 00 00 00|E4 00 00 00    | UTF-32LE ↵
00 00 00 64|00 00 00 65|00 00 00 3A|00 00 00 56|00 00 00 65|00 00 00 72|00 00 00 E4    | UTF-32BE ↵
d          |e          |:          |V          |e          |r          |ä              | de:Verä  ↵
6E 00 00 00|64 00 00 00|65 00 00 00|72 00 00 00|75 00 00 00|6E 00 00 00|67 00 00 00    | UTF-32LE 
00 00 00 6E|00 00 00 64|00 00 00 65|00 00 00 72|00 00 00 75|00 00 00 6E|00 00 00 67    | UTF-32BE
n          |d          |e          |r          |u          |n          |g              | nderung  

64 00|65 00|3A 00|56 00|65 00|72 00|E4 00|6E 00|64 00|65 00|72 00|75 00|6E 00|67 00    |  UTF-16LE
00 64|00 65|00 3A|00 56|00 65|00 72|00 E4|00 6E|00 64|00 65|00 72|00 75|00 6E|00 67    |  UTF-16BE
d    |e    |:    |V    |e    |r    |ä    |n    |d    |e    |r    |u    |n    |g        |  de:Veränderung

64|65|3A|56|65|72|C3 A4|6E|64|65|72|75|6E|67                                           | UTF-8
d |e |: |V |e |r |ä    |n |d |e |r |u |n |g                                            | de:Veränderung
mk:Промена - Mazedonische Sprache mit kyrillischem Alphabet
6D 00 00 00|6B 00 00 00|3A 00 00 00|1F 04 00 00|40 04 00 00 | UTF-32LE ↵
00 00 00 6D|00 00 00 6B|00 00 00 3A|00 00 04 1F|00 00 04 40 | UTF-32BE ↵
m          |k          |:          |П          |р           | mk:Пр    ↵
3E 04 00 00|3C 04 00 00|35 04 00 00|3D 04 00 00|30 04 00 00 | UTF-32LE
00 00 04 3E|00 00 04 3C|00 00 04 35|00 00 04 3D|00 00 04 30 | UTF-32BE
о          |м          |е          |н          |а           | омена

6D 00|6B 00|3A 00|1F 04|40 04|3E 04|3C 04|35 04|3D 04|30 04 |  UTF-16LE
00 6D|00 6B|00 3A|04 1F|04 40|04 3E|04 3C|04 35|04 3D|04 30 |  UTF-16BE
m    |k    |:    |П    |р    |о    |м    |е    |н    |а     |  mk:Промена

6D|6B|3A|D0 9F|D1 80|D0 BE|D0 BC|D0 B5|D0 BD|D0 B0          | UTF-8
m |k |: |П    |р    |о    |м    |е    |н    |а              | mk:Промена

Nepali verwendet das alphasyllabische Silbenschriftsystem Devanagari. Eine Silbe entspricht einem Zeichen, wobei einige wenige Grundzeichen durch hinzufügen von Vokalzeichen modifiziert werden und andere Silben ergeben. (Ähnlich wie wir ein E mit einem Akut am Computer schreiben, nur dass dieser es in É umwandelt, ein eigenes Zeichen im Unicode. Die nepalesischen Zeichen sind jedoch auch im Unicode zusammengesetzt. Der Kreis ist ein Platzhalter für das Grundzeichen, mit dem diese Erweiterung reagiert.) Es handelt sich somit um zwei Zeichen, die ein oder zwei Mal modifiziert wurden. Dies im Gegensatz zum Chinesischen, wo es viele verschiedene Silbenschriftzeichen gibt. Modifizierende Unicode-Zeichen gibt es beispielsweise auch in der hebräischen Schrift.

ne:चांजे - Nepali
6E 00 00 00|65 00 00 00|3A 00 00 00|1A 09 00 00|3E 09 00 00|02 09 00 00|1C 09 00 00|47 09 00 00  | UTF-32LE
00 00 00 6E|00 00 00 65|00 00 00 3A|00 00 09 1A|00 00 09 3E|00 00 09 02|00 00 09 1C|00 00 09 47  | UTF-32BE
n          |e          |:          |च           ा           ं         |ज           े            | ne:चांजे

6E 00|65 00|3A 00|1A 09|3E 09|02 09|1C 09|47 09                                                  |  UTF-16LE
00 6E|00 65|00 3A|09 1A|09 3E|09 02|09 1C|09 47                                                  |  UTF-16BE
n    |e    |:    |च     ा    ं    |ज     े                                                      |  ne:चांजे

6E|65|3A|E0 A4 9A|E0 A4 BE|E0 A4 82|E0 A4 9C|E0 A5 87                                            |  UTF-8
n |e |: |च        ा       ं       |ज        े                                                   | ne:चांजे
zh:变化 - Chinesische Sprachen
7A 00 00 00|68 00 00 00|3A 00 00 00|D8 53 00 00|16 53 00 00  | UTF-32LE
00 00 00 7A|00 00 00 68|00 00 00 3A|00 00 53 D8|00 00 53 16  | UTF-32BE
z          |h          |:          |变         |化           | zh:变化

7A 00|68 00|3A 00|D8 53|16 53                                |  UTF-16LE
00 7A|00 68|00 3A|53 D8|53 16                                |  UTF-16BE
z    |h    |:    |变   |化                                   |  zh:变化

7A|68|3A|E5 8F 98|E5 8C 96                                   | UTF-8
z |h |: |变      |化                                         | zh:变化

Andere Unicode-Kodierungen[Bearbeiten]

Der Unicode-Standard definiert nur UTF-32, UTF-16 und UTF-8.[1] Darüber hinaus gibt es noch andere Kodierungen welche ebenfalls alle Unicode-Zeichen kodieren können. Nachfolgend sind einige Beispiele aufgelistet.

UTF-1[Bearbeiten]

UTF-1 war die erste 8-Bit-Kodierung für Unicode, konnte sich aber aufgrund mehrerer Schwächen nicht durchsetzen.

UTF-7[Bearbeiten]

UTF-7 ist ein veraltetes Format, welches Unicode-Zeichen in druckbare ASCII-Zeichen (die jeweils nur die unteren 7 Bit eines Bytes benötigen, daher der Name des Formats) kodiert. Das Format war für die Übertragung von Unicode-Texten über 7-Bit-Kanäle gedacht (z. B. E-Mail oder Usenet), konnte sich allerdings nicht durchsetzen. Stattdessen wird für diesen Anwendungsfall meist UTF-8 kombiniert mit einem MIME-Transfer-Encoding wie Base 64 oder Quoted-printable verwendet, oder eben UTF-8 mit einem 8-Bit-Kanal.

UTF-EBCDIC[Bearbeiten]

UTF-EBCDIC ist eine Unicode-Kodierung, die auf dem proprietären 8-Bit EBCDIC-Format von IBM-Großrechnern aufbaut, vergleichbar wie UTF-8 auf ASCII.

Es kodiert jedoch die ersten 160 Zeichen (65 Steuerzeichen und 95 graphischen Zeichen) in jeweils einem Byte an den bei EBCDIC üblichen Positionen, soweit existent, den restlichen Unicode-Vorrat analog zu UTF-8 in jeweils zwei bis fünf Bytes (bzw. bis sieben für Codepositionen, die schon mit UTF-16 nicht darstellbar sind, und daher wohl nie mit Zeichen belegt werden), an Positionen, die bei diversen EBCDIC-Codepages mit verschiedenen graphischen Zeichen belegt sind. Die BOM etwa wird zu (hexadezimal) DD 73 66 73 (einer vier-Byte-Sequenz). Dasselbe Zeichen wird dabei teilweise, je nach Codeposition, auch kürzer oder länger als bei UTF-8 codiert.

Es wurde mit dem Ziel entwickelt, die Verarbeitung von Unicode-Daten in existierenden Mainframe-Anwendungen zu erleichtern. In der Praxis wird UTF-EBCDIC auch auf Mainframes nur selten benutzt.

EBCDIC basierte Mainframe-Betriebssysteme wie z/OS benutzen in der Regel UTF-16. Beispielsweise wird UTF-16 von Komponenten wie DB2, COBOL, PL/I, Java und dem IBM XML Toolkit unterstützt.

UTF-5, UTF-6, UTF-9 und UTF-18[Bearbeiten]

UTF-5 und UTF-6 waren Vorschläge zur Benutzung in Internationalen Domainnamen (IDN). Statt ihrer wurde jedoch Punycode standardisiert. UTF-9 und UTF-18 stellten einen Aprilscherz dar, sind prinzipiell auf Computern mit 9-bit-Bytes aber implementierbar.

SCSU[Bearbeiten]

Das Standard Compression Scheme for Unicode ist eine Kodierung, die vor allem auf einen kleinen Speicherbedarf ausgerichtet ist. Es können alle Unicode-Zeichen dargestellt werden, für die meisten Sprachen reicht dabei ein Byte pro Zeichen aus. Im Gegensatz zu anderen Kodierungen lässt sich ein Text auf viele verschiedene Arten kodieren. In der Praxis konnte sich SCSU aber nicht durchsetzen.

CESU-8[Bearbeiten]

CESU-8 (kurz für Compatibility Encoding Scheme for UTF-16: 8-Bit) ist eine Variante von UTF-8. Der Codepoint wird zunächst in UTF-16 ausgedrückt, dann wird das Ergebnis in UTF-8 rekodiert, als wäre es UCS-2.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. http://www.unicode.org/versions/Unicode6.1.0/ch03.pdf#G7404 Chapter 3.9 Unicode Encoding Forms