"Fossies" - the Fresh Open Source Software archive 
Member "manpages-de-0.11/generated/man7/utf-8.7" of archive manpages-de_0.11.orig.tar.gz:
Table of Contents
UTF-8 - eine ASCII-kompatible
Multibyte-Unicode-Kodierung
Der Unicode-3.0-Zeichensatz ist durch
16-Bit-Wörter definiert. Die einfachste Unicode-Kodierung (UCS-2) besteht aus
einer Folge von 16-Bit-Zeichen. Solche Zeichenketten können als Bestandteile
viele 16-Bit-Zeichen wie aq\0aq oder aq/aq enthalten, die z. B. in Dateinamen
und anderen Argumenten von C-Bibliotheksfunktionen eine besondere Bedeutung
haben. Außerdem arbeiten die meisten UNIX-Programme mit ASCII-Dateien und
können 16-Bit-Wörter nicht ohne größere Änderungen verarbeiten. Darum
ist UCS-2 keine geeignete externe Kodierung von Unicode in Dateinamen, Text-Dateien,
Umgebungsvariablen usw. Der ISO 10646 Universal Character Set (UCS), eine
Erweiterung von Unicode, wird sogar durch 31-Bit-Wörter definiert. Die zugehörige
UCS-4-Kodierung (eine Folge von 32-Bit-Wörtern) leidet unter denselben Problemen
wie die UCS-2-Kodierung.
Die UTF-8-Kodierung von Unicode und UCS hat diese
Probleme nicht. Sie ist der gebräuchliche Anwendungsfall des Unicode-Zeichensatzes
auf UNIX-artigen Betriebssystemen.
Die UTF-8-Kodierung hat die
folgenden netten Eigenschaften:
- *
- Die UCS-Zeichen 0x00000000 bis 0x0000007f
(die klassischen US-ASCII-Zeichen) werden einfach als die Bytes 0x00 bis
0x7f kodiert und auf diese Weise die ASCII-Kompatibilität hergestellt. Dateinamen
und Zeichenketten, die nur aus 7-Bit-ASCII-Zeichen bestehen, haben darum unter
ASCII und UTF-8 dieselbe Kodierung.
- *
- Alle UCS-Zeichen über 0x7f werden als
Folge mehrerer Bytes im Bereich 0x80 bis 0xfd dargestellt, so dass kein
ASCII-Byte als Teil eines anderen Zeichens auftritt und es keine Probleme
z.B. mit aq\0aq oder aq/aq gibt.
- *
- Die lexikographische Sortierreihenfolge
von UCS-4-Zeichenketten bleibt erhalten.
- *
- Alle möglichen 2^31 UCS-Zeichen
können mit UTF-8 kodiert werden.
- *
- Die Bytes 0xfe und 0xff werden von der
UTF-8-Kodierung nicht verwendet.
- *
- Das erste Byte einer Multibyte-Folge, die
ein einzelnes nicht in ASCII enthaltenes UCS-Zeichen darstellt, ist grundsätzlich
im Bereich 0xc0 bis 0xfd und zeigt die Länge der Folge an. Alle anderen
Bytes der Folge sind im Bereich 0x80 bis 0xbf. Dadurch wird eine einfache
Neusynchronisierung ermöglich, da die Kodierung zustandslos und daher
robust gegenüber fehlenden oder verloren gegangenen Bytes ist.
- *
- UTF-8-kodierte
UCS-Zeichen können bis zu sechs Byte lang sein. Da aber die Unicode-Norm
keine Zeichen über 0x10FFFF spezifiziert, können Unicode-Zeichen in UTF-8
nur bis zu vier Byte lang sein.
Die folgenden Byte-Folgen werden
für die Darstellung eines Zeichens verwendet. Die zu verwendende Folge hängt
vom UCS-Code des Zeichens ab:
- 0x00000000 - 0x0000007F:
- 0xxxxxxx
- 0x00000080
- 0x000007FF:
- 110xxxxx 10xxxxxx
- 0x00000800 - 0x0000FFFF:
- 1110xxxx 10xxxxxx
10xxxxxx
- 0x00010000 - 0x001FFFFF:
- 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- 0x00200000
- 0x03FFFFFF:
- 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- 0x04000000 - 0x7FFFFFFF:
- 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Die xxx-Bits werden
durch den Code des Zeichens in Binärdarstellung ersetzt. Es wird die jeweils
kürzeste Multibyte-Folge benutzt, die den Code des Zeichens darstellen kann.
Die UCS-Codewerte 0xd800en0xdfff (UTF-16-Ersatzzeichen) sowie 0xfffe und 0xffff
(in UCS keinem Zeichen zugeordnet; UCS noncharacters) sollten nicht in
standardkonformen UTF-8-Datenströmen enthalten sein.
Das Unicode-Zeichen
0xa9 = 1010 1001 (das Copyright-Zeichen) wird in UTF-8 als
11000010 10101001
= 0xc2 0xa9
dargestellt und das Zeichen 0x2260 = 0010 0010 0110 0000 (das
Ungleich-Symbol) als:
11100010 10001001 10100000 = 0xe2 0x89 0xa0
Anwender müssen, z.B. mit
export LANG=en_GB.UTF-8,
eine UTF-8-Locale
wählen, um die UTF-8-Unterstützung in Programmen zu aktivieren.
Anwendungs-Software,
die auf den verwendeten Zeichensatz achten muss, sollte immer, z. B. mit
setlocale(LC_CTYPE, ""),
die Locale setzen und Programmierer anschließend
den Ausdruck
strcmp(nl_langinfo(CODESET), "UTF-8") == 0
auswerten, um festzustellen,
ob eine UTF-8-Locale ausgewählt wurde und ob daher sämtliche Standard-Klartexteingaben
und -ausgaben, Terminalkommunikation, Klartext-Dateiinhalte, Dateinamen und
Umgebungsvariablen in UTF-8 kodiert sind.
An Einzel-Byte-Kodierungen gewöhnte
Programmierer müssen daran denken, dass zwei bislang getroffene Annahmen
in UTF-8-Locales nicht mehr gültig sind. Erstens bedeutet ein einziges Byte
nicht mehr unbedingt ein einzelnes Zeichen. Zweitens, da moderne Terminal-Emulatoren
im UTF-8-Modus auch chinesische, japanische und koreanische Zeichen doppelter
Breite sowie Kombinationszeichen ohne horizontalen Vorschub unterstützen,
setzt die Ausgabe eines einzelnen Zeichens nicht unbedingt den Cursor um
eine Position weiter, wie es bei ASCII der Fall war. Heutzutage sollten
Sie Bibliotheksfunktionen wie mbsrtowcs(3) und wcswidth(3) nutzen, um Zeichen
und Cursorpositionen zählen.
Die offizielle Escape-Sequenz aus einem ISO-2022-Kodierungsschema
(wie zum Beispiel von VT100-Terminals verwendet) nach UTF-8 ist ESC % G ("\x1b%G").
Die entsprechende Sequenz für die Rückkehr von UTF-8 zu ISO 2022 ist ESC
% @ ("\x1b%@"). Andere ISO-2022-Sequenzen (wie zum Umschalten der G0- und G1-Sätze)
sind im UTF-8-Modus nicht anwendbar.
Es ist zu hoffen, dass in absehbarer
Zeit UTF-8 ASCII und ISO 8859 auf allen Ebenen als gemeinsame Zeichenkodierung
auf POSIX-Systemen ersetzt, was diese zu einer wesentlich mächtigeren Umgebung
für den Umgang mit Klartext macht.
Die Standards Unicode und UCS
fordern, dass Erzeuger von UTF-8 die kürzeste mögliche Form liefern. Z. B.
ist der Erzeugung einer Zwei-Byte-Sequenz mit dem ersten Byte 0xc0 nicht
konform. Unicode 3.1 fordert, dass konforme Programme in ihrer Eingabe Formen,
die nicht die kürzesten sind, nicht akzeptieren dürfen. Dies geschieht aus
Sicherheitsgründen: Wenn Benutzereingaben auf mögliche Sicherheitsverletzungen
überprüft werden, könnte ein Programm nur nach den ASCII-Versionen von
"/../" oder ";" oder NUL suchen und übersehen, dass es viele Möglichkeiten
einer Nicht-ASCII-Darstellung neben der kürzesten UFT-8-Kodierung dieser Zeichen
gibt.
ISO/IEC 10646-1:2000, Unicode 3.1, RFC 2279, Plan 9.
nl_langinfo(3), setlocale(3), charsets(7), unicode(7)
Diese
Seite ist Teil der Veröffentlichung 3.35 des Projekts Linux-man-pages. Eine
Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden
können, finden sich unter http://man7.org/linux/man-pages/.
Die
deutsche Übersetzung dieser Handbuchseite wurde von Sebastian Rittau <srittau@jroger.in-berlin.de>
und Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.
Diese Übersetzung
ist Freie Dokumentation; lesen Sie die GNU General Public License Version
3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.
Table of Contents