|
|
Zeile 40: |
Zeile 40: |
| [[Kategorie:Unicode]] | | [[Kategorie:Unicode]] |
| </noinclude> | | </noinclude> |
|
| |
| = TMP =
| |
| '''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 [[Zeichenkodierung|Kodierung]] für [[Unicode]]-Zeichen (Unicode und UCS sind praktisch identisch). Die Kodierung wurde im September 1992 von [[Ken Thompson]] und [[Rob Pike]] bei Arbeiten am [[Plan 9 (Betriebssystem)|Plan-9-Betriebssystem]] festgelegt. Sie wurde zunächst im Rahmen von [[X/Open]] als ''FSS-UTF'' bezeichnet (''filesystem safe UTF'' in Abgrenzung zu [[UTF-1]], das diese Eigenschaft nicht hat), in den Folgejahren erfolgte im Rahmen der Standardisierung die Umbenennung auf die heute übliche Bezeichnung ''UTF-8''.<ref>{{RFC-Internet |RFC=3629 |Titel=UTF-8, a transformation format of ISO 10646 |Datum=2003 |Abschnitt=1 |Abschnittstitel=Introduction}}</ref>
| |
|
| |
| UTF-8 ist in den ersten 128 Zeichen (Indizes 0–127) deckungsgleich mit [[American Standard Code for Information Interchange|ASCII]] und eignet sich mit in der Regel nur einem Byte Speicherbedarf für Zeichen vieler westlicher Sprachen, besonders für die Kodierung englischsprachiger Texte, die sich im Regelfall ohne Modifikation daher sogar mit nicht-UTF-8-fähigen [[Texteditor]]en ohne Beeinträchtigung bearbeiten lassen, was einen der Gründe für den Status als [[De-facto-Standard]]-Zeichenkodierung des Internet und damit verbundener Dokumenttypen darstellt. Im April 2023 verwendeten 97,9 % aller Websites UTF-8<ref>{{Internetquelle |url=https://w3techs.com/technologies/history_overview/character_encoding |titel=Historical trends in the usage of character encodings for websites |werk=W3Techs |hrsg=Q-Success |sprache=en |abruf=2019-03-05}}</ref> und 98,8 % der Top 1000.<ref>{{Internetquelle |url=https://w3techs.com/technologies/cross/character_encoding/ranking |titel=Usage of character encodings broken down by ranking |werk=W3Techs |hrsg=Q-Success |sprache=en |abruf=2019-03-07}}</ref>
| |
|
| |
| In anderen Sprachen ist der Speicherbedarf in Bytes pro Zeichen größer, wenn diese vom ASCII-Zeichensatz abweichen. Die deutschen [[Umlaut#Umlaut als Bezeichnung von Buchstaben|Umlaute]] und das ß (scharfe S) erfordern zwei Bytes, machen aber nur einen kleinen Teil deutscher Texte aus. Ähnlich ist es bei anderen Sprachen wie beispielsweise Französisch, welche überwiegend die lateinischen Buchstaben aus dem ASCII-Raum verwenden. [[Griechisches Alphabet|Griechische]] oder [[kyrillisch]]e Buchstaben belegen hingegen ebenfalls 2 Bytes, allerdings bestehen daraus praktisch die kompletten Texte abgesehen von Leerzeichen, Satzzeichen und Ziffern. Zeichen fernöstlicher Sprachen und von Sprachen aus dem afrikanischen Raum belegen sogar bis zu 4 Bytes je Zeichen.
| |
|
| |
| Da die Verarbeitung von UTF-8 als Multibyte-Zeichenfolge wegen der notwendigen Analyse jedes Bytes im Vergleich zu Zeichenkodierungen mit fester Byteanzahl je Zeichen mehr Rechenaufwand und für bestimmte Sprachen auch mehr Speicherplatz erfordert, werden abhängig vom Einsatzszenario auch andere UTF-Kodierungen zur Abbildung von Unicode-Zeichensätzen verwendet. So führte [[Microsoft]] 1993 mit [[Microsoft Windows NT 3.1|Windows NT 3.1]] die Verwendung von [[UCS-2]] ein, einer Zeichenkodierung, bei der jedes Zeichen fest zwei Bytes belegt. Da durch die spätere Weiterentwicklung von Unicode jedoch mit dieser Kodierung nicht mehr alle Zeichen darstellbar waren, erfolgte mit [[Microsoft Windows 2000|Windows 2000]] ein neuerlicher Umstieg auf den kompatiblen Nachfolger [[UTF-16|UTF-16 Little Endian]], womit man allerdings zugleich die Vorteile einer Kodierung mit fester Byteanzahl wieder verlor.<ref>{{Internetquelle |url=https://utf8everywhere.org/#background |titel=UTF-8 Everywhere Manifesto |sprache=en |abruf=2021-12-22}}</ref>
| |
|
| |
| == Allgemeines ==
| |
| Bei der UTF-8-Kodierung wird jedem Unicode-Zeichen eine speziell kodierte [[Zeichenkette]] variabler Länge zugeordnet. Dabei unterstützt UTF-8 Zeichenketten bis zu einer Länge von vier [[Byte]], auf die sich – wie bei allen [[Unicode Transformation Format|UTF]]-Formaten – alle Unicode-Zeichen abbilden lassen.
| |
|
| |
| UTF-8 hat zentrale Bedeutung als globale Zeichenkodierung im Internet. Die [[Internet Engineering Task Force]] verlangt von allen neuen Internet-Kommunikationsprotokollen, dass die Zeichenkodierung deklariert wird und dass UTF-8 eine der unterstützten Kodierungen ist. Das {{lang|en|[[Internet Mail Consortium]]}} (IMC) empfiehlt, dass alle [[E-Mail-Programm]]e UTF-8 darstellen und senden können.<ref>{{Webarchiv |url=https://www.imc.org/mail-i18n.html |text=''Using International Characters in Internet Mail''. |wayback=20071026103104}} Internet Mail Consortium, 1. August 1998, abgerufen am 12. Juli 2012 (englisch).</ref>
| |
|
| |
| Auch bei der in [[Webbrowser]]n angewendeten Auszeichnungssprache [[Hypertext Markup Language|HTML]] hat sich UTF-8 zur Darstellung sprachspezifischer Zeichen durchgesetzt (über 97 % Anteil im Oktober 2021) und ersetzt dabei die vorher genutzten [[HTML-Entität]]en.<ref>{{Internetquelle |url=https://w3techs.com/technologies/overview/character_encoding/all/ |titel=Usage statistics of character encodings for websites |werk=W3Techs |hrsg=Q-Success |sprache=en |abruf=2021-10-31}}</ref>
| |
|
| |
| == Eigenschaften ==
| |
| * Multi-Byte-Zeichenkodierung ([[Multibyte Character Set|MBCS]]) ähnlich [[Codepage 950|CP950]]/[[Codepage 936|CP936]]/[[Codepage 932|CP932]] (chinesisch/japanisch), aber ohne die (damals wichtige und nützliche) Eigenschaft, dass doppelt breit dargestellte Zeichen zwei Bytes lang sind.
| |
| * Multibyte-Zeichenfolgen bestehen niemals aus 7-Bit-ASCII-Zeichen (ermöglicht Verarbeitung und Parsen mit üblichen 7-Bit-Zeichenkonstanten).
| |
| * Im Vergleich zu [[UTF-16]] relativ kompakt bei hohem Anteil an ASCII-Zeichen, jedoch platzintensiver bei Zeichen zwischen U+0800 und U+FFFF (v. a. asiatische Sprachen, vgl. [[Liste der Unicodeblöcke]])
| |
| * Sortierbarkeit bleibt erhalten, zwei UTF-8-Zeichenketten haben dieselbe Sortierreihenfolge wie zwei unkodierte Unicode-Zeichenketten
| |
| * In beiden Richtungen durchsuchbar (bei bisherigen MBCS nicht der Fall)
| |
| * Einfache Transkodierungsfunktion (zudem leicht Hardware-implementierbar)
| |
| * Reichlich Kodierungsreserve (falls sich am Unicode-Standard doch noch etwas ändert)
| |
| * selbstsynchronisierend<ref>[https://research.swtch.com/utf8 UTF-8: Bits, Bytes, and Benefits]</ref>
| |
|
| |
| == Normung ==
| |
| UTF-8 ist von der [[Internet Engineering Task Force|IETF]], dem [[Unicode-Konsortium]] und der [[Internationale Organisation für Normung|ISO]] gegenwärtig identisch definiert in den Normdokumenten:
| |
| * <nowiki>RFC 3629</nowiki> / STD 63 (2003)<nowiki>RFC 3629</nowiki> / STD 63<ref name="RFC3629" />
| |
| * ''The Unicode Standard, Version 4.0'', §3.9–§3.10 (2003)
| |
| * ISO/IEC 10646-1:2000 Annex D (2000)
| |
|
| |
| Diese lösen ältere, teilweise abweichende Definitionen ab, die teilweise noch von älterer Software benutzt werden:
| |
| * ISO/IEC 10646-1:1993 Amendment 2 / Annex R (1996)
| |
| * ''The Unicode Standard, Version 2.0'', Appendix A (1996)
| |
| * <nowiki>RFC 2044</nowiki> (1996)<ref>{{RFC-Internet |RFC=2044 |Titel=UTF-8, a transformation format of Unicode and ISO 10646 |Datum=1996-10}}</ref>
| |
| * <nowiki>RFC 2279</nowiki> (1998)<ref>{{RFC-Internet |RFC=2279 |Titel=UTF-8, a transformation format of ISO 10646 |Datum=1998-01}}</ref>
| |
| * ''The Unicode Standard, Version 3.0'', §2.3 (2000) und Corrigendum #1: UTF-8 Shortest Form (2000)
| |
| * ''Unicode Standard Annex #27: Unicode 3.1'' (2001)
| |
|
| |
| == Kodierung ==
| |
| === Algorithmus ===
| |
| Unicode-Zeichen mit Werten aus dem Bereich von 0 bis 127 (0 bis 7F hexadezimal) werden in der UTF-8-Kodierung als ein [[Byte]] mit dem gleichen Wert wiedergegeben. Daher sind alle Daten, für die ausschließlich [[American Standard Code for Information Interchange|ASCII]]-Zeichen verwendet werden, in beiden Darstellungen identisch.
| |
|
| |
| Unicode-Zeichen größer als 127 werden in der UTF-8-Kodierung zu 2 bis 4 Byte langen Bytefolgen.
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| !style="max-width:0"| Unicode-Bereich ([[Hexadezimal|hex]])
| |
| ! UTF-8-Kodierung<br /> ([[Dualsystem|binär]], Schema)
| |
| !width="500px"| Erläuterungen
| |
| !style="max-width:0" colspan="2"| <abbr title="''Rechts'' in Klammern jeweils die theoretisch maximal mögliche Zahl kodierbarer Zeichen, die aber aufgrund von Einschränkungen im Unicode- oder UTF-8-Standard nicht in vollem Umfang verwendet werden dürfen.">Anzahl der codierbaren Zeichen</abbr>
| |
| |-
| |
| | 0000 0000 –<br /> 0000 00'''7F'''
| |
| |style="line-height:110%; font-family:consolas" | '''0'''<sub><sub> </sub></sub>a<sub><sub>6</sub></sub>a<sub><sub>5</sub></sub>a<sub><sub>4</sub></sub>a<sub><sub>3</sub></sub>a<sub><sub>2</sub></sub>a<sub><sub>1</sub></sub>a<sub><sub>0</sub></sub>
| |
| | In diesem Bereich entspricht UTF-8 genau dem ASCII-Code:<br /> Das höchstwertige Bit ist <span style="font-family:consolas">'''0'''</span>, die restlichen Bits <span style="font-family:consolas">a<sub><sub>6…0</sub></sub></span> kodieren das ASCII-Zeichen.
| |
| | {{0|(}}2<sup>7</sup>
| |
| | {{0|(}}128
| |
| |-
| |
| | 0000 00'''80''' –<br /> 0000 0'''7FF'''
| |
| |style="line-height:110%; font-family:consolas" | '''1<sub><sub> </sub></sub>1<sub><sub> </sub></sub>0<sub><sub><sub> </sub></sub></sub>'''b<sub><sub>2</sub></sub>b<sub><sub>1</sub></sub>b<sub><sub>0</sub></sub>a<sub><sub>7</sub></sub>a<sub><sub>6</sub></sub><br /> '''1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''a<sub><sub>5</sub></sub>a<sub><sub>4</sub></sub>a<sub><sub>3</sub></sub>a<sub><sub>2</sub></sub>a<sub><sub>1</sub></sub>a<sub><sub>0</sub></sub>
| |
| |rowspan="3" rules="all"| Das Startbyte beginnt immer mit <span style="font-family:consolas">'''11'''</span>, Folgebytes mit <span style="font-family:consolas">'''10'''</span>.<br />
| |
| <span style="font-family:consolas">c<sub><sub>4…0</sub></sub>b<sub><sub>7…0</sub></sub>a<sub><sub>7…0</sub></sub></span> steht für das zu kodierende max. 21 Bit lange Zeichen.<br /> Die Anzahl der Einsen <span style="font-family:consolas">'''1'''</span> vor der ersten Null <span style="font-family:consolas">'''0'''</span> im ersten Byte ist gleich der Gesamtzahl der Bytes für das Zeichen.
| |
| | {{0|(}}2<sup>11</sup> − 2<sup>7</sup><br /> (2<sup>11</sup>)
| |
| | {{0|(}}1920<br /> (2048)
| |
| |-
| |
| | 0000 0'''800''' –<br /> 0000 '''FFFF'''
| |
| |style="line-height:110%; font-family:consolas" | '''1<sub><sub> </sub></sub>1<sub><sub> </sub></sub>1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''b<sub><sub>7</sub></sub>b<sub><sub>6</sub></sub>b<sub><sub>5</sub></sub>b<sub><sub>4</sub></sub><br /> '''1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''b<sub><sub>3</sub></sub>b<sub><sub>2</sub></sub>b<sub><sub>1</sub></sub>b<sub><sub>0</sub></sub>a<sub><sub>7</sub></sub>a<sub><sub>6</sub></sub><br /> '''1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''a<sub><sub>5</sub></sub>a<sub><sub>4</sub></sub>a<sub><sub>3</sub></sub>a<sub><sub>2</sub></sub>a<sub><sub>1</sub></sub>a<sub><sub>0</sub></sub>
| |
| | {{0|(}}2<sup>16</sup> − 2<sup>11</sup><br /> (2<sup>16</sup>)
| |
| | {{0|(}}63.488<br /> (65.536)
| |
| |-
| |
| | 000'''1 0000''' –<br /> 00'''10 FFFF'''
| |
| |style="line-height:110%; font-family:consolas" | '''1<sub><sub> </sub></sub>1<sub><sub> </sub></sub>1<sub><sub> </sub></sub>1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''c<sub><sub>4</sub></sub>c<sub><sub>3</sub></sub>c<sub><sub>2</sub></sub><br /> '''1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''c<sub><sub>1</sub></sub>c<sub><sub>0</sub></sub>b<sub><sub>7</sub></sub>b<sub><sub>6</sub></sub>b<sub><sub>5</sub></sub>b<sub><sub>4</sub></sub><br /> '''1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''b<sub><sub>3</sub></sub>b<sub><sub>2</sub></sub>b<sub><sub>1</sub></sub>b<sub><sub>0</sub></sub>a<sub><sub>7</sub></sub>a<sub><sub>6</sub></sub><br /> '''1<sub><sub> </sub></sub>0<sub><sub> </sub></sub>'''a<sub><sub>5</sub></sub>a<sub><sub>4</sub></sub>a<sub><sub>3</sub></sub>a<sub><sub>2</sub></sub>a<sub><sub>1</sub></sub>a<sub><sub>0</sub></sub>
| |
| | {{0|(}}2<sup>20</sup><!--
| |
| Berechnung: (Unicode-Bereich) minus (Zeichen die bereits durch drei-Byte-Zeichenfolgen oder kürzer abgebildet sind)
| |
| (17*2^16) - (2^16) = 16*2^16 = 2^20
| |
| --><br /> (2<sup>21</sup>)
| |
| | {{0|(}}1.048.576<br /> (2.097.152)
| |
| |}
| |
|
| |
| === Anmerkungen ===
| |
| Der Algorithmus lässt theoretisch längere Bytesequenzen zu. Ursprünglich wurde eine Folge aus einem ersten Byte mit bis zu ''1111110x'' (FC<sub>hex</sub> und FD<sub>hex</sub>) und fünf Folge-Bytes der Form ''10xxxxxx'' definiert, in denen so insgesamt 31 Bit für den enthaltenen Unicode-Wert kodiert werden konnten.
| |
|
| |
| In seiner Verwendung als [[Unicode Transformation Format|UTF-Kodierung]] ist er aber auf den gemeinsamen Coderaum aller Unicode-Kodierungen beschränkt, also von 0 bis 0010 FFFF (1.114.112 Möglichkeiten) und weist maximal vier Bytes lange Byteketten auf. Der damit verfügbare Wertebereich für den Zeichencode wird letztlich nicht vollständig benutzt. Entsprechend lange Bytefolgen und große Werte gelten heute als unzulässige Codes und sind entsprechend zu behandeln.
| |
|
| |
| Das erste Byte eines UTF-8-kodierten Zeichens nennt man dabei '''Start-Byte''', weitere Bytes heißen '''Folge-Bytes'''. Start-Bytes beginnen also immer mit 0 oder 11, Folge-Bytes immer mit 10.
| |
| * Ist das höchste Bit des ersten Bytes 0, handelt es sich um ein ASCII-Zeichen, da ASCII eine 7-Bit-Kodierung ist und die ersten 128 Unicode-Zeichen den ASCII-Zeichen entsprechen. Damit sind alle ASCII-Zeichenketten automatisch aufwärtskompatibel zu UTF-8.
| |
| * Ist das höchste Bit des ersten Bytes 1, handelt es sich um ein Mehrbytezeichen, also ein Unicode-Zeichen mit einer Zeichennummer größer als 127.
| |
| * Sind die höchsten beiden Bits eines Bytes 11, handelt es sich um das Startbyte eines Mehrbytezeichens, sind sie 10, um ein Folgebyte.
| |
| * Die [[Lexikographische Ordnung|lexikalische Ordnung]] nach Bytewerten entspricht der lexikalischen Ordnung nach Zeichennummern, da höhere Zeichennummern mit entsprechend mehr 1-Bits im Start-Byte kodiert werden.
| |
| * Bei den Startbytes von Mehrbyte-Zeichen gibt die Anzahl der höchsten 1-Bits die gesamte Bytezahl des als Mehrbyte-Zeichen kodierten Unicode-Zeichens an. Anders interpretiert, die Anzahl der 1-Bits links des höchsten 0-Bits entspricht der Anzahl an Folgebytes plus eins, z. B. 1110xxxx 10xxxxxx 10xxxxxx = drei Bits vor dem höchsten 0-Bit = drei Bytes insgesamt, zwei Bits nach dem höchsten 1-Bit vor dem höchsten 0-Bit = zwei Folgebytes.
| |
| * Startbytes (0… oder 11…) und Folgebytes (10…) lassen sich eindeutig voneinander unterscheiden. Somit kann ein Bytestrom auch in der Mitte gelesen werden, ohne dass es Probleme mit der Dekodierung gibt, was insbesondere bei der Wiederherstellung defekter Daten wichtig ist. Bytes beginnend mit 10 werden einfach übersprungen, bis 0… oder 11… erkannt wird. Dass Startbytes und Folgebytes eindeutig voneinander unterschieden sind, ist ein Vorteil der UTF-8-Kodierung. Bei Kodierungen ohne diese Eigenschaft ist das Lesen eines Datenstroms, dessen Beginn unbekannt ist, unter Umständen nicht möglich.
| |
|
| |
| Zu beachten:
| |
|
| |
| * Das gleiche Zeichen kann theoretisch auf unterschiedliche Weise kodiert werden (Zum Beispiel „a“ als ''0'''''1100001''' oder fälschlich als ''110''0000'''1''' ''10'''''100001'''). Jedoch ist nur die jeweils kürzestmögliche Kodierung erlaubt. Dieser Umstand hat mehrfach zu Problemen geführt, wenn Programme bei ungültigen Kodierungen abstürzen, diese als gültig interpretieren oder einfach ignorieren. Die Kombinationen der letzten beiden Verhaltensweisen führte z. B. zu Firewalls, die gefährliche Inhalte auf Grund der ungültigen Kodierung nicht erkennen, wo jedoch der zu schützende Client diese Kodierungen als gültig interpretiert und dadurch gefährdet ist.
| |
| * Bei mehreren Bytes für ein Zeichen werden die Bits ''bündig'' angeordnet – das niedrigste Bit (''least significant bit'') des Unicode-Zeichens steht also immer im niedrigsten Bit des letzten UTF-8-Bytes.
| |
| * Ursprünglich gab es auch Kodierungen mit mehr als vier [[Oktett (Informatik)|Oktetten]] (bis zu sechs), diese sind jedoch ausgeschlossen worden, da es in [[Unicode]] keine korrespondierenden Zeichen gibt und [[ISO 10646]] in seinem möglichen Zeichenumfang an Unicode angeglichen wurde.
| |
| * Für alle auf dem [[Lateinisches Alphabet|lateinischen Alphabet]] [[Lateinisches Schriftsystem|basierenden Schriften]] ist UTF-8 eine besonders platzsparende Methode zur Abbildung von Unicode-Zeichen.
| |
| * Die Unicode-Bereiche U+D800 bis U+DBFF und U+DC00 bis U+DFFF sind ausdrücklich keine Zeichen, sondern dienen nur in [[UTF-16]] zur Kodierung von Zeichen außerhalb der ''[[Unicode#Gliederung|Basic Multilingual Plane]]'', sie wurden früher als ''Low'' und ''High surrogates'' bezeichnet. Folglich sind Bytefolgen, die diesen Bereichen entsprechen, kein gültiges UTF-8. Zum Beispiel wird U+10400 in UTF-16 als D801,DC00 dargestellt, sollte in UTF-8 aber als F0,90,90,80 und nicht als ED,A0,81,ED,B0,80 ausgedrückt werden. [[Java (Programmiersprache)|Java]] unterstützt dies seit der Version 1.5.<ref>{{Internetquelle |autor=Norbert Lindenberg, Masayoshi Okutsu |url=https://www.oracle.com/technical-resources/articles/javase/supplementary.html |titel=Supplementary Characters in the Java Platform |werk=Oracle Website |hrsg=Sun Microsystems |datum=2004-05 |sprache=en |abruf=2019-06-09}}</ref> Aufgrund der weiten Verbreitung der falschen Kodierung, insbesondere auch in Datenbanken, wurde diese Kodierung nachträglich als [[CESU-8]] normiert.
| |
| * In UTF-8, [[UTF-16]] und [[UTF-32]] ist jeweils der gesamte Wertebereich von Unicode kodiert.
| |
| * Kann eine Byte-Sequenz nicht als UTF-8-Zeichen interpretiert werden, so wird es beim Lesen in der Regel durch das [[Ersetzungszeichen|Unicode-Replacement-Zeichen]] U+FFFD bzw. EF,BF,BD ersetzt.
| |
|
| |
| === Zulässige Bytes und ihre Bedeutung ===
| |
| Durch die Kodierungsregel von UTF-8 sind bestimmte Bytewerte nicht zulässig. In nachfolgender Tabelle sind alle 256 Möglichkeiten aufgeführt und deren Verwendung bzw. Gültigkeit angegeben. Bytewerte in roten Zeilen sind unzulässig, grün beschreibt zulässige Bytewerte, welche unmittelbar ein Zeichen darstellen. In blau sind jene Werte hinterlegt, welche den Start einer Sequenz von zwei oder mehr Byte beginnen und als Sequenz mit den Bytewerten aus orange hinterlegten Zeilen fortgesetzt werden.
| |
|
| |
| {| class="wikitable" style="font-family:monospace;"
| |
| |- style="font-family:sans-serif;"
| |
| ! colspan="3"| UTF-8 Wertebereich
| |
| ! rowspan="2"| Bedeutung
| |
| |- style="font-family:sans-serif;"
| |
| ! Binär
| |
| ! Hexadezimal
| |
| ! Dezimal
| |
| |- class=hintergrundfarbe9
| |
| | 00000000–01111111
| |
| |style="text-align:center"| 00–7F
| |
| |style="text-align:right"| 0–127
| |
| |style="font-family: sans-serif;"| Ein Byte lange Zeichen, deckungsgleich mit US-ASCII
| |
| |- style="background:#fc8;"
| |
| | 10000000–10111111
| |
| |style="text-align:center"| 80–BF
| |
| |style="text-align:right"| 128–191
| |
| |style="font-family: sans-serif;"| Zweites, drittes oder viertes Byte einer Bytesequenz
| |
| |- class=hintergrundfarbe7
| |
| | 11000000–11000001
| |
| |style="text-align:center"| C0–C1
| |
| |style="text-align:right"| 192–193
| |
| |style="font-family: sans-serif;"| Start einer 2 Byte langen Sequenz, welche den Codebereich aus 0 bis 127 abbildet, unzulässig
| |
| |- style="background:#99DDFF"
| |
| | 11000010–11011111
| |
| |style="text-align:center"| C2–DF
| |
| |style="text-align:right"| 194–223
| |
| |style="font-family: sans-serif;"| Start einer 2 Byte langen Sequenz (U+0080 … U+07FF)
| |
| {| class="mw-collapsible mw-collapsed" style="border:1px solid #000000; border-collapse:collapse;"
| |
| |- style="border-bottom:1px solid #000000;"
| |
| ! Startbyte !! abgedeckter Codebereich
| |
| |-
| |
| | C2 || U+0080 … U+00BF
| |
| |-
| |
| | C3 || U+00C0 … U+00FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | C4 || U+0100 … U+013F
| |
| |-
| |
| | C5 || U+0140 … U+017F
| |
| |-
| |
| | C6 || U+0180 … U+01BF
| |
| |-
| |
| | C7 || U+01C0 … U+01FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | C8 || U+0200 … U+023F
| |
| |-
| |
| | C9 || U+0240 … U+027F
| |
| |-
| |
| | CA || U+0280 … U+02BF
| |
| |-
| |
| | CB || U+02C0 … U+02FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | CC || U+0300 … U+033F
| |
| |-
| |
| | CD || U+0340 … U+027F
| |
| |-
| |
| | CE || U+0380 … U+03BF
| |
| |-
| |
| | CF || U+03C0 … U+03FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | D0 || U+0400 … U+043F
| |
| |-
| |
| | D1 || U+0440 … U+047F
| |
| |-
| |
| | D2 || U+0480 … U+04BF
| |
| |-
| |
| | D3 || U+04C0 … U+04FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | D4 || U+0500 … U+053F
| |
| |-
| |
| | D5 || U+0540 … U+057F
| |
| |-
| |
| | D6 || U+0580 … U+05BF
| |
| |-
| |
| | D7 || U+05C0 … U+05FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | D8 || U+0600 … U+063F
| |
| |-
| |
| | D9 || U+0640 … U+067F
| |
| |-
| |
| | DA || U+0680 … U+06BF
| |
| |-
| |
| | DB || U+06C0 … U+06FF
| |
| |- style="border-top:1px dotted #000000;"
| |
| | DC || U+0700 … U+073F
| |
| |-
| |
| | DD || U+0740 … U+077F
| |
| |-
| |
| | DE || U+0780 … U+07BF
| |
| |-
| |
| | DF || U+07C0 … U+07FF
| |
| |}
| |
| |- style="background:#99DDFF"
| |
| | 11100000–11101111
| |
| |style="text-align:center"| E0–EF
| |
| |style="text-align:right"| 224–239
| |
| |style="font-family: sans-serif;"| Start einer 3 Byte langen Sequenz (U+0800 … U+FFFF)
| |
| {| class="mw-collapsible mw-collapsed toptextcells" style="border:1px solid #000000; border-collapse:collapse;"
| |
| |- style="border-bottom:1px solid #000000;"
| |
| ! Startbyte !! abgedeckter Codebereich || Anmerkung
| |
| |-
| |
| | E0
| |
| | U+0800 … U+0FFF
| |
| |style="font-size:smaller"| 2. Byte:
| |
| {| style="font-size:smaller; border:1px solid #000000;"
| |
| |- style="background:#FF8888"
| |
| | 80 … 9F || unzulässige Kodierung für U+0000 … U+07FF
| |
| |-
| |
| | A0 … BF ||U+0800 … U+0FFF
| |
| |}
| |
| |-
| |
| | E1 || U+1000 … U+1FFF
| |
| |-
| |
| | E2 || U+2000 … U+2FFF
| |
| |-
| |
| | E3 || U+3000 … U+3FFF
| |
| |-
| |
| | E4 || U+4000 … U+4FFF
| |
| |-
| |
| | E5 || U+5000 … U+5FFF
| |
| |-
| |
| | E6 || U+6000 … U+6FFF
| |
| |-
| |
| | E7 || U+7000 … U+7FFF
| |
| |-
| |
| | E8 || U+8000 … U+8FFF
| |
| |-
| |
| | E9 || U+9000 … U+9FFF
| |
| |-
| |
| | EA || U+A000 … U+AFFF
| |
| |-
| |
| | EB || U+B000 … U+BFFF
| |
| |-
| |
| | EC || U+C000 … U+CFFF
| |
| |-
| |
| | ED || U+D000 … U+DFFF
| |
| |style="font-size:smaller"| 2. Byte:
| |
| {| style="font-size:smaller; border:1px solid #000000;"
| |
| |-
| |
| | 80 … 9F || U+D000 … U+D7FF
| |
| |- style="background:#FF8888"
| |
| | A0 … BF || unzulässig! Siehe [[CESU-8]]
| |
| |}
| |
| |-
| |
| | EE || U+E000 … U+EFFF ||style="font-size:smaller"| ([[Private Use Area#Private Use Zone|Private Use Zone]])
| |
| |-
| |
| | EF || U+F000 … U+FFFF ||style="font-size:smaller"| (Private Use Zone, wenn 2. Byte im Bereich 80 … A3)
| |
| |}
| |
| |- style="background:#99DDFF"
| |
| | 11110000–11110100
| |
| |style="text-align:center"| F0–F4
| |
| |style="text-align:right"| 240–244
| |
| |style="font-family: sans-serif;"| Start einer 4 Byte langen Sequenz (Inklusive der ungültigen Codebereiche von <code style="background:none;">110000</code> bis <code style="background:none;">13FFFF</code>)
| |
| {| class="mw-collapsible mw-collapsed toptextcells" style="border:1px solid #000000; border-collapse:collapse;"
| |
| |- style="border-bottom:1px solid #000000;"
| |
| ! Startbyte !! abgedeckter Codebereich
| |
| |-
| |
| | F0 || U+10000 … U+3FFFF <small>(2. Byte muss aus Bereich 90 … BF sein, wobei B0…BF der bisher ungenutzten Ebene 3 entspricht)</small>
| |
| |-
| |
| | F1 || U+40000 … U+7FFFF <small>''(derzeit keine gültigen Zeichen in diesem Bereich)''</small>
| |
| |-
| |
| | F2 || U+80000 … U+BFFFF <small>''(derzeit keine gültigen Zeichen in diesem Bereich)''</small>
| |
| |-
| |
| | F3 || U+C0000 … U+FFFFF
| |
| |-
| |
| | F4 || U+100000 … U+10FFFF <small>(2. Byte muss aus Bereich 80 … 8F sein!)</small>
| |
| |}
| |
| |- class=hintergrundfarbe7
| |
| | 11110101–11110111
| |
| |style="text-align:center"| F5–F7
| |
| |style="text-align:right"| 245–247
| |
| |style="font-family: sans-serif;"| Ungültig nach <nowiki>RFC 3629</nowiki>:<ref name="RFC3629" /> Start einer 4 Byte langen Sequenz für Codebereich über <code style="background:none;">140000</code>
| |
| |- class=hintergrundfarbe7
| |
| | 11111000–11111011
| |
| |style="text-align:center"| F8–FB
| |
| |style="text-align:right"| 248–251
| |
| |style="font-family: sans-serif;"| Ungültig nach <nowiki>RFC 3629</nowiki>:<ref name="RFC3629" /> Start einer 5 Byte langen Sequenz
| |
| |- class=hintergrundfarbe7
| |
| | 11111100–11111101
| |
| |style="text-align:center"| FC–FD
| |
| |style="text-align:right"| 252–253
| |
| |style="font-family: sans-serif;"| Ungültig nach <nowiki>RFC 3629</nowiki>:<ref name="RFC3629" /> Start einer 6 Byte langen Sequenz
| |
| |- class=hintergrundfarbe7
| |
| | 11111110–11111111
| |
| |style="text-align:center"| FE–FF
| |
| |style="text-align:right"| 254–255
| |
| |style="font-family: sans-serif;"| Ungültig. In der ursprünglichen UTF-8-Spezifikation nicht definiert.
| |
| |}
| |
|
| |
| {| class="wikitable" style="text-align:center; font-weight:bold;"
| |
| |- class="hintergrundfarbe6"
| |
| ! [[Hexadezimalsystem|Code]]
| |
| ! style="width:5.88%"| …0 ||style="width:5.88%"| …1 ||style="width:5.88%"| …2 ||style="width:5.88%"| …3 ||style="width:5.88%"| …4 ||style="width:5.88%"| …5 ||style="width:5.88%"| …6 ||style="width:5.88%"| …7 ||style="width:5.88%"| …8 ||style="width:5.88%"| …9 ||style="width:5.88%"| …A ||style="width:5.88%"| …B ||style="width:5.88%"| …C ||style="width:5.88%"| …D ||style="width:5.88%"| …E ||style="width:5.88%"| …F
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 0…
| |
| | title="Null"| ''[[Nullzeichen|NUL]]''
| |
| | title="Start of Heading"| ''[[Start of Heading|SOH]]''
| |
| | title="Start of Text"| ''[[Start of Text (Steuerzeichen)|STX]]''
| |
| | title="End of Text"| ''[[End of Text (Steuerzeichen)|ETX]]''
| |
| | title="End of Transmission"| ''[[End of Transmission|EOT]]''
| |
| | title="Enquiry"| ''[[Steuerzeichen#C0-Steuerzeichen|ENQ]]''
| |
| | title="Acknowledge"| ''[[ACK (Signal)|ACK]]''
| |
| | title="Bell"| ''[[Bell (Steuerzeichen)|BEL]]''
| |
| | title="Back Space"| ''[[Backspace|BS]]''
| |
| | title="Horizontal Tab"| ''[[Tabulatorzeichen|HT]]''
| |
| | title="Line Feed"| ''[[Zeilenvorschub|LF]]''
| |
| | title="Vertical Tab"| ''[[Tabulatorzeichen|VT]]''
| |
| | title="Form Feed"| ''[[Seitenvorschub|FF]]''
| |
| | title="Carriage Return"| ''[[Wagenrücklauf|CR]]''
| |
| | title="Shift Out"| ''[[Shift Out|SO]]''
| |
| | title="Shift In"| ''[[Shift In|SI]]''
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 1…
| |
| | title="Data Link Escape"| ''[[Data Link Escape|DLE]]''
| |
| | title="Device Control 1"| ''[[XON/XOFF|DC1]]''
| |
| | title="Device Control 2"| ''DC2''
| |
| | title="Device Control 3"| ''[[XON/XOFF|DC3]]''
| |
| | title="Device Control 4"| ''DC4''
| |
| | title="Negative Acknowledge"| ''[[ACK (Signal)|NAK]]''
| |
| | title="Synchronous Idle"| ''[[Idle|SYN]]''
| |
| | title="End of Transmission Block"| ''[[Transmission Block|ETB]]''
| |
| | title="Cancel"| ''[[Steuerzeichen #C0-Steuerzeichen|CAN]]''
| |
| | title="End of Medium"| ''[[Medienende|EM]]''
| |
| | title="Substitute"| ''[[Zeichenersetzung|SUB]]''
| |
| | title="Escape"| ''[[Escape (Steuerzeichen)|ESC]]''
| |
| | title="File Separator"| ''[[Datei-Separator|FS]]''
| |
| | title="Group Separator"| ''GS''
| |
| | title="Record Separator"| ''[[Datensatz|RS]]''
| |
| | title="Unit Separator"| ''[[Entität (Informatik)|US]]''
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 2…
| |
| | title="Leerzeichen"| [[Leerzeichen|SP]]
| |
| | title="Ausrufezeichen"| [[Ausrufezeichen|!]]
| |
| | title="Anführungszeichen"| [[Anführungszeichen|"]]
| |
| | title="Doppelkreuz"| [[Doppelkreuz (Schriftzeichen)|#]]
| |
| | title="Dollarzeichen"| [[Dollarzeichen|$]]
| |
| | title="Prozentzeichen"| [[Prozent|%]]
| |
| | title="Et-Zeichen"| [[Et-Zeichen|&]]
| |
| | title="Apostroph"| [[Apostroph|']]
| |
| | title="Klammer"| [[Klammer (Zeichen)|(]]
| |
| | title="Klammer"| [[Klammer (Zeichen)|)]]
| |
| | title="Sternchen"| [[Sternchen (Schriftzeichen)|*]]
| |
| | title="Pluszeichen"| [[Pluszeichen|+]]
| |
| | title="Komma"| [[Komma|,]]
| |
| | title="Bindestrich-Minus"| [[Bindestrich-Minus|-]]
| |
| | title="Punkt"| [[Punkt (Satzzeichen)|.]]
| |
| | title="Schrägstrich"| [[Schrägstrich|/]]
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 3…
| |
| | title="Null"| [[Null|0]]
| |
| | title="Eins"| [[Eins|1]]
| |
| | title="Zwei"| [[Zwei|2]]
| |
| | title="Drei"| [[Drei|3]]
| |
| | title="Vier"| [[Vier|4]]
| |
| | title="Fünf"| [[Fünf|5]]
| |
| | title="Sechs"| [[Sechs|6]]
| |
| | title="Sieben"| [[Sieben|7]]
| |
| | title="Acht"| [[Acht|8]]
| |
| | title="Neun"| [[Neun|9]]
| |
| | title="Doppelpunkt"| [[Doppelpunkt|:]]
| |
| | title="Semikolon"| [[Semikolon|;]]
| |
| | title="Kleiner als"| [[Vergleichszeichen|<]]
| |
| | title="Gleichheitszeichen"| [[Gleichheitszeichen|=]]
| |
| | title="Größer als"| [[Vergleichszeichen|>]]
| |
| | title="Fragezeichen"| [[Fragezeichen|?]]
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 4…
| |
| | title="At-Zeichen"| [[At-Zeichen|@]]
| |
| | title="A"| [[A]]
| |
| | title="B"| [[B]]
| |
| | title="C"| [[C]]
| |
| | title="D"| [[D]]
| |
| | title="E"| [[E]]
| |
| | title="F"| [[F]]
| |
| | title="G"| [[G]]
| |
| | title="H"| [[H]]
| |
| | title="I"| [[I]]
| |
| | title="J"| [[J]]
| |
| | title="K"| [[K]]
| |
| | title="L"| [[L]]
| |
| | title="M"| [[M]]
| |
| | title="N"| [[N]]
| |
| | title="O"| [[O]]
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 5…
| |
| | title="P"| [[P]]
| |
| | title="Q"| [[Q]]
| |
| | title="R"| [[R]]
| |
| | title="S"| [[S]]
| |
| | title="T"| [[T]]
| |
| | title="U"| [[U]]
| |
| | title="V"| [[V]]
| |
| | title="W"| [[W]]
| |
| | title="X"| [[X]]
| |
| | title="Y"| [[Y]]
| |
| | title="Z"| [[Z]]
| |
| | title="Eckige Klammer"| [[Eckige Klammer|<nowiki>[</nowiki>]]
| |
| | title="Umgekehrter Schrägstrich"| [[Umgekehrter Schrägstrich|\]]
| |
| | title="Eckige Klammer"| [[Eckige Klammer|]]]
| |
| | title="Zirkumflex"| [[Zirkumflex|^]]
| |
| | title="Unterstrich"| [[Unterstrich|_]]
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 6…
| |
| | title="Gravis"| [[Gravis (Typografie)|`]]
| |
| | title="a"| [[a]]
| |
| | title="b"| [[b]]
| |
| | title="c"| [[c]]
| |
| | title="d"| [[d]]
| |
| | title="e"| [[e]]
| |
| | title="f"| [[f]]
| |
| | title="g"| [[g]]
| |
| | title="h"| [[h]]
| |
| | title="i"| [[i]]
| |
| | title="j"| [[j]]
| |
| | title="k"| [[k]]
| |
| | title="l"| [[l]]
| |
| | title="m"| [[m]]
| |
| | title="n"| [[n]]
| |
| | title="o"| [[o]]
| |
| |- class="hintergrundfarbe9"
| |
| | class="hintergrundfarbe6"| 7…
| |
| | title="p"| [[p]]
| |
| | title="q"| [[q]]
| |
| | title="r"| [[r]]
| |
| | title="s"| [[s]]
| |
| | title="t"| [[t]]
| |
| | title="u"| [[u]]
| |
| | title="v"| [[v]]
| |
| | title="w"| [[w]]
| |
| | title="x"| [[x]]
| |
| | title="y"| [[y]]
| |
| | title="z"| [[z]]
| |
| | title="Geschweifte Klammer"| [[Geschweifte Klammer|{]]
| |
| | title="Senkrechter Strich"| [[Senkrechter Strich||]]
| |
| | title="Geschweifte Klammer"| [[Geschweifte Klammer|}]]
| |
| | title="Tilde"| [[Tilde|~]]
| |
| | title="DEL"| [[Delete|DEL]]
| |
| |-
| |
| ! class="hintergrundfarbe6"| 8…
| |
| |colspan="16" rowspan=4 style="background:#fc8"| <span style="font-weight:normal;">''Zweites, drittes oder viertes Byte einer Bytesequenz''</span>
| |
| |-
| |
| ! class="hintergrundfarbe6"| 9…
| |
| |-
| |
| ! class="hintergrundfarbe6"| A…
| |
| |-
| |
| ! class="hintergrundfarbe6"| B…
| |
| |-
| |
| ! class="hintergrundfarbe6"| C…
| |
| | class=hintergrundfarbe7 colspan="2"|
| |
| |style="background:#99DDFF; border-left-style: hidden;" colspan="14" rowspan="2" | <span style="font-weight:normal;">''Start einer 2 Byte langen Sequenz''</span>
| |
| |-
| |
| ! class="hintergrundfarbe6"| D…
| |
| |style="background:#99DDFF" colspan="2"|
| |
| |-
| |
| ! class="hintergrundfarbe6"| E…
| |
| |style="background:#99DDFF" colspan="16"| <span style="font-weight:normal;">''Start einer 3 Byte langen Sequenz''</span>
| |
| |-
| |
| ! class="hintergrundfarbe6"| F…
| |
| |style="background:#99DDFF" colspan="5"| <span style="font-weight:normal;">''Start einer 4 Byte langen Sequenz''</span> || class=hintergrundfarbe7 colspan="3"| || class=hintergrundfarbe7 colspan="4"| || class=hintergrundfarbe7 colspan="2"| || class=hintergrundfarbe7 colspan="2"|
| |
| |- class="hintergrundfarbe6"
| |
| !
| |
| ! …0 || …1 || …2 || …3 || …4 || …5 || …6 || …7 || …8 || …9 || …A || …B || …C || …D || …E || …F
| |
| |}
| |
|
| |
| === Beispiele ===
| |
| In folgender Tabelle sind einige Kodierungsbeispiele für UTF-8 angegeben:
| |
|
| |
| {| class="wikitable"
| |
| |+ Beispiele für UTF-8 Kodierungen
| |
| |-
| |
| ! Zeichen
| |
| ! Unicode
| |
| ! Unicode binär
| |
| ! UTF-8 binär
| |
| ! UTF-8 hexadezimal
| |
| |-
| |
| | Buchstabe ''y''
| |
| | U+0079
| |
| |style="text-align:right; font-family:monospace;"| 00000000 0<span style="color:#00CC00">1111001</span>
| |
| |style="font-family:monospace;"| '''0'''<span style="color:#00CC00">1111001</span>
| |
| | 79
| |
| |-
| |
| | Buchstabe ''ä''
| |
| | U+00E4
| |
| |style="text-align:right; font-family:monospace;"| 00000<span style="color:#00CCCC">000 11</span><span style="color:#00CC00">100100</span>
| |
| |style="font-family:monospace;"| '''110'''<span style="color:#00CCCC">00011</span> '''10'''<span style="color:#00CC00">100100</span>
| |
| | C3 A4
| |
| |-
| |
| | Zeichen für eingetragene Marke [[®]]
| |
| | U+00AE
| |
| |style="text-align:right; font-family:monospace;"| 00000<span style="color:#00CCCC">000 10</span><span style="color:#00CC00">101110</span>
| |
| |style="font-family:monospace;"| '''110'''<span style="color:#00CCCC">00010</span> '''10'''<span style="color:#00CC00">101110</span>
| |
| | C2 AE
| |
| |-
| |
| | [[Eurozeichen]] ''[[€]]''
| |
| | U+20AC
| |
| |style="text-align:right; font-family:monospace;"| <span style="color:#CC00CC">0010</span><span style="color:#00CCCC">0000 10</span><span style="color:#00CC00">101100</span>
| |
| |style="font-family:monospace;"| '''1110'''<span style="color:#CC00CC">0010</span> '''10'''<span style="color:#00CCCC">000010</span> '''10'''<span style="color:#00CC00">101100</span>
| |
| | E2 82 AC
| |
| |-
| |
| | [[Violinschlüssel]] ''[[𝄞]]''
| |
| | U+1D11E
| |
| |style="text-align:right; font-family:monospace;"| 000<span style="color:#CCCC00">000</span><span style="color:#CC00CC">01 1101</span><span style="color:#00CCCC">0001 00</span><span style="color:#00CC00">011110</span>
| |
| |style="font-family:monospace;"| '''11110'''<span style="color:#CCCC00">000</span> '''10'''<span style="color:#CC00CC">011101</span> '''10'''<span style="color:#00CCCC">000100</span> '''10'''<span style="color:#00CC00">011110</span>
| |
| | F0 9D 84 9E
| |
| |}
| |
|
| |
| Das letzte Beispiel liegt außerhalb des ursprünglich in [[Unicode]] (unter Version 2.0) enthaltenen Codebereiches (16 Bit), der in der aktuellen Unicode-Version als [[Unicode#Gliederung|BMP-Bereich (Ebene 0)]] enthalten ist. Da derzeit viele Schriftarten diese neuen Unicode-Bereiche noch nicht enthalten, können die dort enthaltenen Zeichen auf vielen Plattformen nicht korrekt dargestellt werden. Stattdessen wird ein [[Ersatzzeichen]] dargestellt, welches als Platzhalter dient.
| |
|
| |
| == Darstellung in Editoren ==
| |
| === Byte Order Mark ===
| |
| Obwohl bei UTF-8 aufgrund der Art der Kodierung grundsätzlich nicht das Problem unterschiedlicher Bytereihenfolgen auftreten kann, fügen einige Programme eine [[Byte Order Mark]] (BOM, {{deS|Bytereihenfolge-Markierung}}) am Dateianfang von UTF-8-Dateien ein. Die BOM besteht aus der Bytesequenz '''EF BB BF''', die in nicht UTF-8-fähigen [[Texteditor]]en und [[Webbrowser|Browsern]] meist als [[ISO 8859-1|ISO-8859-1]]-Zeichenfolge <nowiki></nowiki> erscheint und für Kompatibilitätsprobleme verantwortlich sein kann.
| |
|
| |
| === Nicht im Unicodeblock Basis-Lateinisch enthaltene Zeichen ===
| |
| Die Buchstaben des [[Unicodeblock Basis-Lateinisch|lateinischen Grundalphabets]] sowie die wichtigsten Satzzeichen werden in UTF-8 und [[ISO-8859|ISO-8859-*]] identisch angezeigt. Probleme mit der falsch gewählten Zeichencodierung treten bei den anderen Zeichen auf, beispielsweise bei [[Umlaut]]en. In deutschsprachigen Texten treten diese Zeichen jedoch nur vereinzelt auf, sodass der Text zwar stark entstellt wirkt, aber meist noch lesbar bleibt.
| |
|
| |
| In UTF-8 bestehen die Umlaute des [[Deutsches Alphabet|deutschen Alphabets]] (sofern sie in der [[Normalisierung (Unicode)|Normalform NFC]] vorliegen, also als ''precomposed character'') und das ß aus zwei Bytes; nach ISO 8859 wird jedes Zeichen als 1 Byte codiert und jedes Byte beim Lesen in ein Zeichen transformiert. Das in der UTF-8-Kodierung dieser Buchstaben gemeinsame erste Byte C3<sub>hex</sub> wird, wie der Tabelle zu entnehmen ist, jeweils unterschiedlich decodiert, ebenso das weitere Byte der Codierung von äöü, dagegen wird bei ÄÖÜß das zweite Byte nicht oder mit dem gleichen Fehler-Zeichen dargestellt, weil 7F<sub>hex</sub> bis 9F<sub>hex</sub> in ISO 8859 nicht definiert sind, was die Lesbarkeit des Textes zusätzlich erschwert.
| |
|
| |
| Bei der Interpretation eines in ISO-8859-codierten Textes als UTF-8 führen die Buchstaben öü zur Anzeige eines Ersetzungszeichens, weil der entsprechende Byte-Wert, wie der Tabelle unten zu entnehmen ist, nicht definiert ist. Bei den Buchstaben äöüß wird ein Start-Byte angenommen und versucht, das nächste Byte als Folgebyte gemeinsam als ein Zeichen zu interpretieren. Das scheitert häufig, weil die Codierungen der meisten Buchstaben keine gültigen Folgebytes sind. Bei einem ä wird sogar versucht, die nächsten beiden Bytes als Folgebyte zu interpretieren, was aus denselben Gründen regelmäßig scheitert. Je nach Programmierung des anzeigenden Programms verschwinden womöglich entsprechend viele Buchstaben aus dem Text.
| |
|
| |
| {| class="wikitable"
| |
| |+ UTF-8-Text mit anderem Encoding geöffnet:
| |
| |-
| |
| !colspan="3"| UTF-8 !! ISO-8859-1 !! ISO-8859-15 !! UTF16
| |
| |-
| |
| | U+00E4 || C3A4<sub>hex</sub>|| ä || ä || À || 쎤
| |
| |-
| |
| | U+00F6 || C3B6<sub>hex</sub>|| ö || ö || ö || 쎶
| |
| |-
| |
| | U+00FC || C3BC<sub>hex</sub> || ü || ü || ÃŒ || 쎼
| |
| |-
| |
| | U+00DF || C39F<sub>hex</sub> || ß || Ã{{Char|159}} || Ã{{Char|159}} || 쎟
| |
| |-
| |
| | U+00C4 || C384<sub>hex</sub> || Ä || Ã{{Char|132}} || Ã{{Char|132}} || 쎄
| |
| |-
| |
| | U+00D6 || C396<sub>hex</sub> || Ö || Ã{{Char|150}} || Ã{{Char|150}} || 쎖
| |
| |-
| |
| | U+00DC || C39C<sub>hex</sub> || Ü || Ã{{Char|156}} || Ã{{Char|156}} || 쎜
| |
| |}
| |
| <!-- die rechnerisch entstehenden Zeichen 132, 150, 152, 156 sind ungültig und haben ggf. keine grafische Darstellung -->
| |
|
| |
| {| class="wikitable" style="text-align:center;"
| |
| |-
| |
| !colspan="4" style="text-align:right"| ISO-Latin-!!1!!2!!3!!4!!5!!6!!7!!8!!9!!10
| |
| !rowspan="2" colspan="2" style="text-align:center"| UTF-8
| |
| |-
| |
| !colspan="4" style="text-align:right"|ISO/IEC 8859-
| |
| ![[ISO/IEC 8859-1|1]]!![[ISO 8859-2|2]]!![[ISO 8859-3|3]]!![[ISO 8859-4|4]]!![[ISO 8859-9|9]]!![[ISO 8859-10|10]]!![[ISO 8859-13|13]]!![[ISO 8859-14|14]]!![[ISO 8859-15|15]]!![[ISO 8859-16|16]]
| |
| |-
| |
| ![[Binärcode|Bin]]!![[Oktal|Oct]]!![[Dezimal|Dec]]!![[Hexadezimal|Hex]]
| |
| !colspan="12"|
| |
| |-
| |
| !1010 0100 !!244!!164!!A4
| |
| |colspan="4"|[[¤]]||[[¤]]||[[Ī]]||[[¤]]||[[Ċ]]||colspan="2"|[[Eurosymbol|€]]|| Folgebyte ||align=right|+24
| |
| |-
| |
| !1011 0110!!266!!182!!B6
| |
| | [[¶]]||[[ś]]||[[ĥ]]||[[ļ]]||[[¶]]||[[ķ]]||colspan="4"|[[¶]]|| Folgebyte||align=right|+36
| |
| |-
| |
| !1011 1100!!274!!188!!BC
| |
| | [[¼]]||[[ź]]||[[ĵ]]||[[ŧ]]||[[¼]]||[[ž]]||[[¼]]||[[ỳ]]||colspan="2"|[[Œ]]||Folgebyte||align=right|+3C
| |
| |-
| |
| !1100 0011!!303!!195!!C3
| |
| | [[Ã]]||[[Ă]]||style="background-color:#ccffcc;"| ||colspan="3"|[[Ã]]||[[Ć]]||colspan="2"|[[Ã]]||[[Ă]]||Startbyte||style="text-align:right"| Latin 0080
| |
| |-
| |
| !1100 0100!!304!!196!!C4
| |
| |colspan="10"|[[Ä]]||Startbyte||style="text-align:right"| Latin 00C0
| |
| |-
| |
| !1101 0110!!326!!214!!D6
| |
| |colspan="10"|[[Ö]]||Startbyte||style="text-align:right"| Hebrew 0580
| |
| |-
| |
| !1101 1100!!334!!220!!DC
| |
| |colspan="10"|[[Ü]]||Startbyte||style="text-align:right"| Syriac 0700
| |
| |-
| |
| !1101 1111!!337!!223!!DF
| |
| |colspan="10"|[[ß]]||Startbyte||style="text-align:right"| N’Ko 07C0
| |
| |-
| |
| !1110 0100!!344!!228!!E4
| |
| |colspan="10"|[[ä]]||Startbyte||style="text-align:right"| Kana 3000
| |
| |-
| |
| !1111 0110!!366!!246!!F6
| |
| |colspan="10"|[[ö]]||style="text-align:center;" colspan=2|unzulässig
| |
| |-
| |
| !1111 1100!!374!!252!!FC
| |
| |colspan="10"|[[ü]]||style="text-align:center;" colspan=2|unzulässig
| |
| |}
| |
|
| |
| Ein Beispiel für das Wort ''Höhe'':
| |
| ; UTF-8-Text in ISO-8859-1/9/13-16-Umgebung
| |
| : ''Höhe'' → ''Höhe''.
| |
| ; ISO-8859-1-Text in UTF-8-Umgebung
| |
| : ''Höhe'' → ''H''�''he'' bzw. Fehlermeldung mit Abbruch. Ein Byte mit dem Hexadezimalwert ''F6'' ist in UTF-8 nicht zulässig. Es ist üblich, für nicht konvertierbare Zeichen das [[Ersetzungszeichen]] (U+FFFD) einzufügen.
| |