Unicode Transformation Format

Methode, Unicode-Zeichen auf Folgen von Bytes abzubilden
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 14. Februar 2019 um 12:01 Uhr durch 84.135.222.162 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

darstellen. Auch lässt sich jedes dieser Formate verlustfrei in eine andere UTF-Variante konvertieren.

Die verschiedenen Formate unterscheiden sich hinsichtlich ihres Platzbedarfs auf Speichermedien (Speichereffizienz), dem Kodierungs- und Dekodierungsaufwand ([[Laufzeit (Info vorher eindeutig definiert oder wird die Information anders übertragen (etwa durch „charset“ bei HTML), so wird sie weggelassen.

Beispiele

Als Beispiel der Ausdruck „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.

Veränderung (de) 00 6E|00 00 00 67                | UTF-32BE
e          |r          |u          |n          |g                          | erung
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 56|00 65|00 72|00 E4|00 6E|00 64|00 65|00 72|00 75|00 6E|00 67          | UTF-16BE
V    |e    |r    |ä    |n    |d    |e    |r    |u    |n    |g              | Veränderung
56|65|72|C3 A4|6E|64|65|72|75|6E|67                                        | UTF-8
V |e |r |ä    |n |d |e |r |u |n |g                                         | Veränderung
Промена - Mazedonische Sprache mit kyrillischem Alphabet (mk)
1F 04 00 00|40 04 00 00|3E 04 00 00|3C 04 00 00 | UTF-32LE ↵
00 00 04 1F|00 00 04 40|00 00 04 3E|00 00 04 3C | UTF-32BE ↵
П          |р          |о          |м           | Пром    ↵
35 04 00 00|3D 04 00 00|30 04 00 00             | UTF-32LE
00 00 04 35|00 00 04 3D|00 00 04 30             | UTF-32BE
е          |н          |а                       | ена
1F 04|40 04|3E 04|3C 04|35 04|3D 04|30 04       | UTF-16LE
04 1F|04 40|04 3E|04 3C|04 35|04 3D|04 30       | UTF-16BE
П    |р    |о    |м    |е    |н    |а           | Промена
D0 9F|D1 80|D0 BE|D0 BC|D0 B5|D0 BD|D0 B0       | UTF-8
П    |р    |о    |м    |е    |н    |а           | Промена

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.

चांजे - Nepali (ne)
1A 09 00 00|3E 09 00 00|02 09 00 00|1C 09 00 00|47 09 00 00  | UTF-32LE
00 00 09 1A|00 00 09 3E|00 00 09 02|00 00 09 1C|00 00 09 47  | UTF-32BE
च           ा           ं         |ज           े            | चांजे
1A 09|3E 09|02 09|1C 09|47 09                                | UTF-16LE
09 1A|09 3E|09 02|09 1C|09 47                                | UTF-16BE
च     ा    ं    |ज     े                                    | चांजे
E0 A4 9A|E0 A4 BE|E0 A4 82|E0 A4 9C|E0 A5 87                 | UTF-8
च        ा       ं       |ज        े                        | चांजे
变化 - Chinesische Sprachen (zh)
D8 53 00 00|16 53 00 00  | UTF-32LE
00 00 53 D8|00 00 53 16  | UTF-32BE
变         |化           | 变化
D8 53|16 53              | UTF-16LE
53 D8|53 16              | UTF-16BE
变   |化                 | zh:变化
E5 8F 98|E5 8C 96        | UTF-8
变      |化              | 变化

Andere Unicode-Kodierungen

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

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

UTF-7

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.

Beispiel: Das Wort Übergröße wird in UTF-7 zu +ANw-bergr+APYA3w-e, was mit 19 Byte etwas kompakter ist, als die 24 Byte, die quoted-printable UTF-8 benötigt: =C3=9Cbergr=C3=B6=C3=9Fe>.

UTF-EBCDIC

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

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

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

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.

GB18030

Die Zeichenkodierung GB18030 ist ebenfalls als Unicode Transformation Format anzusehen, da sie sämtliche Unicode-Codepoints abbilden kann. Sie wurde mit dem Ziel entworfen, kompatibel zu den Kodierungen GBK und GB2312 zu sein, welche sie ablösen soll.

Aufgrund dieser Kompatibilität ist die Kodierung deutlich aufwändiger als UTF-8, da die Kodierung nicht systematisch ist. Üblicherweise wird sie daher über Lookup-Tabellen implementiert. ASCII-Zeichen werden in einem Byte kodiert und entsprechen der normalen ASCII-Kodierung. Andere Zeichen werden in zwei oder vier Bytes kodiert, wobei in diesen Mehrbyte-Sequenzen – im Gegensatz zu UTF-8 – auch der Wertebereich der ASCII-Zeichen erneut mit genutzt wird.

Einzelnachweise

  1. Chapter 3.9 Unicode Encoding Forms. (PDF) unicode.org