Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

UTF-8

UTF-8 (Abkürzung für 8-Bit UCS Transformation Format, wobei UCS wiederum Universal Coded Character Set abkürzt) ist die am weitesten verbreitete Kodierung …

Inhalt6 Abschnitte
  1. 1. Kernidee und Bedeutung
  2. 2. Grundlegende Eigenschaften
  3. 3. Kodierungsverfahren
  4. 4. Wichtige Folgerungen
  5. 5. Ungültige Kodierungen und Bytebereiche
  6. 6. Darstellungsfehler und Byte Order Mark

Kernidee und Bedeutung

UTF-8 steht für „8-Bit UCS Transformation Format“ und ist die am weitesten verbreitete Kodierung für Unicode-Zeichen. Eine Zeichenkodierung legt fest, wie Zeichen als Bytes gespeichert oder übertragen werden. Unicode beziehungsweise UCS ist ein Zeichensatz, der Zeichen vieler Schriftsysteme eindeutig nummeriert; UTF-8 beschreibt, wie diese Nummern als Bytefolgen dargestellt werden.

UTF-8 ist wichtig, weil es sich als De-facto-Standard im Internet und in vielen Dokumenttypen etabliert hat. Im April 2023 verwendeten 97,9 % aller Websites UTF-8 und 98,8 % der Top 1000. Auch in HTML hat UTF-8 frühere Lösungen wie HTML-Entitäten für sprachspezifische Zeichen weitgehend ersetzt; im Oktober 2021 lag der Anteil bei über 97 %. Die Internet Engineering Task Force verlangt für neue Internet-Kommunikationsprotokolle, dass die Zeichenkodierung deklariert wird und UTF-8 eine der unterstützten Kodierungen ist. Das Internet Mail Consortium empfiehlt, dass E-Mail-Programme UTF-8 darstellen und senden können.

Grundlegende Eigenschaften

In UTF-8 wird jedem Unicode-Zeichen eine Bytefolge mit einer Länge von einem bis vier Byte zugeordnet. Damit können, wie bei allen UTF-Formaten, alle Unicode-Zeichen abgebildet werden.

Die ersten 128 Unicode-Zeichen, also U+0000 bis U+007F, entsprechen 7-Bit-ASCII und werden in UTF-8 durch genau ein Byte mit demselben Wert dargestellt. Dazu gehören Ziffern sowie Groß- und Kleinbuchstaben des lateinischen Grundalphabets. Deshalb sind reine ASCII-Texte in UTF-8 unverändert und können meist auch mit älteren, nicht UTF-8-fähigen Texteditoren bearbeitet werden.

Zusätzliche Zeichen europäischer Sprachen mit lateinischer Schrift, zum Beispiel ä, ß, é, ł und Š, benötigen zwei Byte. Auch griechische, kyrillische und arabische Buchstaben sowie alle weiteren Zeichen bis U+07FF belegen zwei Bytes. Zeichen der Basic Multilingual Plane, kurz BMP, im Bereich U+0800 bis U+FFFF werden mit drei Bytes kodiert; dazu gehören viele indische und fernöstliche Schriftzeichen. Seltene Zeichen außerhalb der BMP benötigen vier Byte.

Im Vergleich zu UTF-16 ist UTF-8 bei Texten mit vielen 7-Bit-ASCII-Zeichen deutlich kompakter. UTF-16 verwendet für alle Zeichen der BMP zwei Byte und für Zeichen außerhalb der BMP zweimal zwei Byte. Bei asiatischen Schriften kann UTF-8 dagegen platzintensiver sein.

Kodierungsverfahren

Für Unicode-Werte von 0 bis 127, also U+0000 bis U+007F, verwendet UTF-8 ein einzelnes Byte mit demselben Wert. Nur in diesem Fall beginnt ein UTF-8-Byte mit dem Bit 0.

Unicode-Zeichen mit Werten größer als 127 werden als Folgen von zwei bis vier Bytes kodiert. Das erste Byte heißt Start-Byte und beginnt immer mit 11. Die weiteren Bytes heißen Folge-Bytes und beginnen immer mit 10. Die Anzahl der Einsen vor der ersten Null im Start-Byte gibt an, wie viele Bytes insgesamt zu diesem Zeichen gehören. Die Bits des Unicode-Zeichens werden dabei bündig angeordnet; das niedrigste Bit des Unicode-Zeichens steht im niedrigsten Bit des letzten UTF-8-Bytes.

Die zulässigen Bereiche sind: U+0000 bis U+007F mit einem Byte, U+0080 bis U+07FF mit zwei Bytes, U+0800 bis U+FFFF mit drei Bytes und U+010000 bis U+10FFFF mit vier Bytes. Beispiele aus dem Artikel sind: y hat den Codepoint U+0079 und wird als 79 hexadezimal kodiert; ä hat U+00E4 und wird als C3 A4 kodiert; Ω hat U+03A9 und wird als CE A9 kodiert; € hat U+20AC und wird als E2 82 AC kodiert; der Violinschlüssel 𝄞 hat U+1D11E und wird als F0 9D 84 9E kodiert.

Wichtige Folgerungen

Aus dem Algorithmus folgen mehrere praktische Eigenschaften. Wenn das höchste Bit des ersten Bytes 0 ist, handelt es sich um ein ASCII-Zeichen. Daher sind reine ASCII-Zeichenketten automatisch aufwärtskompatibel zu UTF-8, und für Schriften auf Grundlage des lateinischen Alphabets ist UTF-8 oft besonders platzsparend.

Kodierungen mit bis zu drei Bytes decken genau die nullte Unicode-Ebene ab, die Basic Multilingual Plane mit den Zeichen 0 bis 65.535. Zeichen außerhalb dieser Ebene benötigen immer vier Bytes.

Die Byte-Reihenfolge ist bei Mehrbytezeichen eindeutig festgelegt. Varianten wie big-endian und little-endian müssen deshalb nicht unterschieden werden. Außerdem entspricht die lexikalische Ordnung nach Bytewerten der Ordnung nach Unicode-Zeichennummern.

Start-Bytes und Folge-Bytes lassen sich eindeutig unterscheiden: Start-Bytes beginnen mit 0 oder 11, Folge-Bytes mit 10. Dadurch kann ein Bytestrom auch ab einer Stelle in der Mitte gelesen werden, was besonders bei der Wiederherstellung beschädigter Daten hilfreich ist. Die Kodierung und Dekodierung erfordert wegen des einfachen Algorithmus nur wenig Rechenaufwand.

Ungültige Kodierungen und Bytebereiche

Der UTF-8-Algorithmus ließe theoretisch längere Bytefolgen zu. Früher waren auch Folgen aus fünf Bytes mit Startbyte F8 hexadezimal bis FB hexadezimal und sechs Bytes mit Startbyte FC hexadezimal oder FD hexadezimal definiert. Heute ist UTF-8 aber auf den gemeinsamen Unicode-Coderaum von U+0000 bis U+10FFFF beschränkt, also auf 17 Ebenen mit insgesamt 1.114.112 Codepoints. Gültiges UTF-8 hat daher höchstens vier Bytes pro Zeichen; längere Folgen und größere Werte sind unzulässig.

Außerdem erlaubt der Standard nur die jeweils kürzestmögliche Kodierung. Der Buchstabe y darf zum Beispiel als 79 hexadezimal kodiert werden, aber nicht fälschlich als C1 B9. Deshalb können C0 hexadezimal und C1 hexadezimal niemals in gültigem UTF-8 vorkommen. Auch Ω wird als CE A9 kodiert, nicht als E0 8E A9 oder F0 80 8E A9. Solche ungültigen Mehrfachkodierungen führten in Programmen zu Sicherheitsproblemen, wenn sie übersehen, ignoriert oder unterschiedlich interpretiert wurden.

Die Unicode-Bereiche U+D800 bis U+DFFF sind keine Zeichen. Sie dienen in UTF-16 zur Kodierung von Zeichen außerhalb der Basic Multilingual Plane und wurden früher als Low und High surrogates bezeichnet. Bytefolgen, die diesen Bereichen entsprechen, sind kein gültiges UTF-8. Zum Beispiel darf U+10400 in UTF-8 nur als F0 90 90 80 hexadezimal ausgedrückt werden, nicht als ED A0 81 ED B0 80. Die verbreitete falsche Kodierung wurde später als CESU-8 normiert.

Bei den Bytewerten gilt: 00 bis 7F stehen für ein Byte lange Zeichen entsprechend U+0000 bis U+007F; 80 bis BF sind Folge-Bytes; C2 bis DF starten gültige Zwei-Byte-Sequenzen; E0 bis EF starten Drei-Byte-Sequenzen; F0 bis F4 starten Vier-Byte-Sequenzen. C0 und C1 sind unzulässig, F5 bis F7 sind nach RFC 3629 ungültig, F8 bis FB wären ungültige Starts von Fünf-Byte-Sequenzen, FC bis FD ungültige Starts von Sechs-Byte-Sequenzen, und FE bis FF sind ungültig.

Darstellungsfehler und Byte Order Mark

Wenn Daten mit einer falschen Kodierung gelesen werden, können Zeichen falsch dargestellt werden. Kann eine Byte-Sequenz nicht als UTF-8-Zeichen interpretiert werden, wird sie beim Lesen meist durch das Ersetzungszeichen � ersetzt. Dieses Zeichen hat den Codepoint U+FFFD und die UTF-8-Kodierung EF BF BD hexadezimal.

Bei deutschen Texten werden die Buchstaben des lateinischen Grundalphabets und die wichtigsten Satzzeichen in UTF-8 und ISO 8859 gleich angezeigt. Probleme entstehen vor allem bei Umlauten und ß. In UTF-8 bestehen Ä, Ö, Ü, ä, ö, ü und ß in der Normalform NFC aus zwei Bytes; in ISO 8859-1 und ISO 8859-15 belegt jedes dieser Zeichen ein Byte. Wird ein UTF-8-Text als ISO-8859-1 oder ISO-8859-15 geöffnet, wird zum Beispiel aus „Höhe“ die Darstellung „Höhe“. Wird ein ISO-8859-1-Text als UTF-8 geöffnet, kann aus „Höhe“ „H�he“ werden, weil F6 hexadezimal in UTF-8 nicht zulässig ist. Je nach Programm kann stattdessen auch eine Fehlermeldung mit Abbruch auftreten.

Bei anderen Sprachen mit lateinischem Alphabet, etwa Französisch, Schwedisch oder Kroatisch, sind die Verhältnisse ähnlich. Texte mit nichtlateinischen Alphabeten, zum Beispiel griechischer Text in ISO 8859-7, werden hingegen unlesbar, wenn sie als UTF-8 interpretiert werden.

Eine Byte Order Mark, kurz BOM, ist eine Bytereihenfolge-Markierung am Dateianfang. Bei UTF-8 ist sie wegen der eindeutig festgelegten Byte-Reihenfolge eigentlich nicht nötig, wird aber von manchen Programmen eingefügt. Die UTF-8-BOM besteht aus EF BB BF. In nicht UTF-8-fähigen Texteditoren und Browsern erscheint sie oft als ISO-8859-1-Zeichenfolge  und kann Kompatibilitätsprobleme verursachen.

Lernvideos zu UTF-8

Weiterlesen

Zeichenkodierung Eine Zeichenkodierung (englisch character encoding, kurz encoding) erlaubt die eindeutige Zuordnung von Schriftzeichen (i. A. Buchstaben oder Ziffern) und … Unicode [ ˈjuːnikoːt]) legt fest, wie Schrift elektronisch gespeichert werden kann, z. B. auf einem Computer oder Telefon. Der durch den Standard festgelegte … Webbrowser Webbrowser oder allgemein auch Browser ([ˈbɹaʊ̯zə(ɹ)], zu englisch to browse ‚stöbern') sind Computerprogramme zur Darstellung von Webseiten im World Wide … Hypertext Markup Language Die Hypertext Markup Language (HTML, englisch für Hypertext-Auszeichnungssprache) ist eine textbasierte Auszeichnungssprache zur Strukturierung … American Standard Code for Information Interchange Der American Standard Code for Information Interchange (ASCII, alternativ US-ASCII, ausgesprochen [ˈæski], deutsch „Amerikanischer Standard-Code für den … Byte-Reihenfolge Die Byte-Reihenfolge (englisch byte order oder endianness) bezeichnet in der Informatik die Speicherorganisation für einfache Zahlenwerte, in erster Linie … Lexikographische Ordnung Die lexikographische Ordnung ist eine Methode, um aus einer linearen Ordnung für einfache Objekte, beispielsweise alphabetisch angeordnete Buchstaben, … Java (Programmiersprache) Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems, welches 2010 von Oracle übernommen wurde. Hexadezimalsystem Aussprache der Hexadezimalzahlen · 0x10 sprich: „eins-null“ (nicht: „zehn“), oder mit Kontext „hex eins-null“ · 0x1E sprich: „eins-E“, · 0xF112 sprich: „F-eins- … Steuerzeichen Durch Steuerzeichen ist es möglich, Steuerungsbefehle für die Ausgabegeräte innerhalb des Zeichensatzes zu übertragen, anstatt die Steuerungsinformationen über … Ausrufezeichen Rufzeichen (österreichisches Hochdeutsch), in Deutschland zum Teil auch Ausrufungszeichen und seltener Rufezeichen genannt, ist ein Satzzeichen, das nach … Anführungszeichen Regeln · Überschriften, Werktitel (etwa von Büchern und Theaterstücken), Namen von Zeitungen und dergleichen: · Sprichwörter, Äußerungen und dergleichen, zu denen …