WikiDer > UTF-8

UTF-8

UTF-8 (8-bisschenUnicode-Transformationsformat) ist ein Weg zu Unicode/ISO 10646-Speichere Charaktere als Stream von Bytes, ein sogenannter Zeichenkodierung. Alternativen sind UTF-16 und UTF-32.

UTF-8 ist eine Zeichencodierung mit variabler Länge: Nicht jedes Zeichen verwendet die gleiche Anzahl von Bytes. Je nach Zeichen werden 1 bis 4 Byte verwendet. Für die Aufnahme eines der 128 ASCIIZeichen (0-127) benötigen nur 7 Bit. Die Funktion des ursprünglichen 8. Paritäts-/Strobe-Bits wurde bald obsolet. ASCII besteht aus nur einem Byte, wobei das höchste Bit immer eine Null ist. Vor dem Aufkommen von Unicode verwendeten viele Länder eine Erweiterung des ASCII-Zeichensatzes mit sprachspezifischen Zeichen in den Positionen 128-255.

Beschreibung

UTF-8 ist standardisiert als RFC 3629[1] (UTF-8, ein Transformationsformat von ISO 10646).

Zusammenfassend sind die Unicode-Zeichen in Bitgruppen organisiert, die auf die unteren Bits der UTF-8-Bytes verteilt werden.

Die Zeichen U 0000..U 007F, die ASCIIZeichen, können direkt in ein Byte mit dem höchsten Bit 0 codiert werden. Alle anderen Zeichen benötigen 2 bis 4 Byte. Alle Bytes für solche Zeichen haben das höchste Bit von 1, um Verwechslungen mit den ASCII-Zeichen zu vermeiden.

Im letzteren Fall sind die höchsten beiden Bits im ersten Byte gleich '11' und im folgenden Byte(s) gleich '10'. Dadurch kann jederzeit das erste Byte eines UTF-8-codierten Zeichens erkannt werden. Die Position der höchsten '0' im ersten Byte gibt an, aus wie vielen Bytes der Code besteht.

Codebereich
hexadezimal
UTF-32
binär
UTF-16
binär
UTF-8
binär
Hinweis zum UTF-8-Code
U 0000..U 007F00000000 00000000
00000000 0aaaaaa
00000000 0aaaaaa0aaaaaaASCII-Äquivalente; Byte beginnt mit Nullbit
U 0080..U 07FF00000000 00000000
00000bbb aaaaaaaa
00000bbb aaaaaaaa110bbbaa 10aaaaaaerstes Byte beginnt mit 110, zweites mit 10
U 0800..U D7FF und U E000..U FFFF00000000 00000000
bbbbbbbb aaaaaaaaa
bbbbbbbb aaaaaaaaa1110bbbb 10bbbbbaa 10aaaaaaerstes Byte beginnt mit 1110, nächstes mit 10
U 010000..U 10FFFF
(1.048.576 ergänzend Codepunkte)
00000000 000cccc
bbbbbbbb aaaaaaaaa
110110dd ddbbbbbb
110111bb aaaaaaaa
11110ccm 10ccbbbb 10bbbbbaa 10aaaaaaerstes Byte beginnt mit 11110, nächstes mit 10,
dddd = ccccc − 1

Die Codes U D800..U DFFF sind aus dem Codebereich U 0800..U FFFF ausgeschlossen, um in UTF-16 Zwei-Byte-Codes von den ersten bzw. letzten beiden Bytes von Vier-Byte-Codes (der erste der of zwei Byte hat nicht die Form 110110dd oder 110111bb). Sie werden für sogenannte Ersatzpaare von vier Byte, aber sie sind nicht in Unicode definiert.

Wie beispielsweise die nicht überlappenden Codebereiche in der linken Spalte zeigen, darf U 007F (binär 01111111) in UTF-8 nur als 7F codiert werden und nicht als C1 BF (was es nach dem Schema 110bbbaa 10aaaaaa wäre) . Grundsätzlich ist nur die kürzeste Form zulässig.

Erlaubte Zeichen

Nach der ursprünglichen Spezifikation konnte ein UTF-8-Code aus bis zu sechs Bytes bestehen. Um die Kompatibilität mit UTF-16 zu gewährleisten, wurde dies auf maximal vier Byte gekürzt und U10FFFF wurde zum höchsten zulässigen Unicode-Zeichen.

Ein Konverter für UTF-8-Code sollte aufgrund von Sicherheitsrisiken Text mit ungültigen Codes ablehnen.[2]

Leistungen

  • In ASCII codierter Text ist unverändert als UTF-8-Text gültig.
  • Da die Buchstaben des lateinischen Alphabets nur ein Byte belegen, ist UTF-8 für westliche Sprachen kompakter als das einfachere UTF-16. Textdateien mit Auszeichnungssprache, wie HTML oder XML (insbesondere Dateien im docx- oder odf-Format), enthalten auch viele Codewörter in ASCII, auch für Dateien in nicht-westlichen Sprachen.
  • UTF-8 ist unabhängig vom Endianität vom Computer (im Gegensatz zu UTF-16) und daher besser als Austauschformat geeignet.
  • Es ist viel einfacher, Unix-Systeme mit UTF-8 kompatibel zu machen als mit UTF-16, zum Beispiel weil ProgrammAPIist für die Programmiersprache C kann unverändert gelassen werden (sowohl in ASCII als auch in UTF-8 kann ein String als nullterminiert behandelt werden verkohlen*; ein UTF-16-String enthält normalerweise viele Null-Bytes und wird normalerweise als a treated behandelt kurz*).
  • UTF-8-Strings können wie Byte-Strings sortiert werden.
  • Wordbreak-Routinen für ASCII funktionieren mit UTF-8 ohne Modifikation korrekt.
  • Dateibenennungsroutinen für ASCII funktionieren korrekt mit UTF-8 (alle Sonderzeichen in Dateinamen und Pfaden sind ASCII-Zeichen)
  • Da das erste Byte angibt, wie viele Bytes ein Zeichen codiert, ist die variable Länge der Zeichen in UTF-8 leicht zu decodieren. Da Fortsetzungsbytes als solche unterscheidbar sind, kann außerdem ein Zeichen nicht als Teilzeichenfolge eines anderen Zeichens codiert werden, so dass Suchvorgänge keine falschen Ergebnisse liefern können, selbst wenn die Suche nicht am Anfang des Textes begonnen wird.

Nachteile

  • Die variable Länge erschwert das direkte Arbeiten mit Strings in vielen Programmiersprachen, weil es neine Vorzeichen entspricht nicht immer dem neine Byte. Dies kann durch die Verwendung der entsprechenden Bibliotheken dafür gelöst werden. Zum Beispiel in Blitz ist der Befehl System.useCodepage=true benötigt, um UTF-8 zu verwenden. Dieses Problem gilt jedoch auch für die Codierung in UTF-16, die ebenfalls eine variable Breite hat.
  • Viele ostasiatische Zeichen verwenden in UTF-8 drei Byte, während sie in UTF-16 nur zwei Byte verwenden würden. Dadurch werden Textdateien in diesen Sprachen größer als in UTF-16. Wichtige Dokumentformate wie html, docx oder odt bestehen jedoch größtenteils aus XML-ähnlichen Formatierungen in ASCII, die in UTF-8 nur ein Byte benötigen. Außerdem verschwinden Unterschiede in der Kodierung nach der Komprimierung. In der Praxis ist daher auch bei Dokumenten in ostasiatischen Sprachen der Größenunterschied zwischen UTF-16 und UTF-8 meist minimal.
  • Windows und die Programmiersprachen Java und C# sind darauf ausgelegt, UTF-16-Strings anstelle von UTF-8 zu verwenden.

Benutzen

UTF-8 wurde in 1993 eingeführt. Rund um das Jahr 2000 die Linux-basierten Distributionen haben als Standard für alle Textdateien (einschließlich Skriptdateien) auf UTF-8 umgestellt. Die Dateien selbst zeigen nicht, ob sie in UTF-8 kodiert sind. Dies wird erst beim Betrachten des Textes deutlich.

Microsoft war zuvor auf UTF-16 umgestiegen, hat aber auch UTF-8 hinzugefügt. Wenn Microsoft Windows Klartext in UTF-8 speichert, fügen Microsoft-Programme die drei Bytes 0xEF, 0xBB und 0xBF, den UTF-8-Code für U FEFF, am Anfang der Datei, das "Byte Order Mark", oder kurz BOM", die jedoch von anderen Programmen nicht immer gut erkannt wird.

Webseiten können auch UTF-8 verwenden. Der Quellcode der Webseiten zeigt dann an, dass es sich um UTF-8-Code handelt. Die meisten Website-Builder bevorzugen UTF-8, da es in anderen Sprachen weniger Mehrdeutigkeiten als ASCII oder gibt ANSI-Zeichensatz. Wikipedia verwendet beispielsweise UTF-8 für den gesamten Text und auch in Email UTF-8 wird zunehmend verwendet.[3]

Externer Link

  • UTF-8-Tabellen - UTF-8-Zeichen in verschiedenen Varianten (verwenden Sie das Dropdown-Menü in der dritten Zeile, um einen Block auszuwählen)