charsets(7) Miscellaneous Information Manual charsets(7) BEZEICHNUNG charsets - Zeichensatzstandards und Internationalisierung BESCHREIBUNG Diese Handbuchseite gibt einen Uberblick uber verschiedene Zeichensatzstandards und wie sie unter Linux verwandt wurden, bevor Unicode allgegenwartig wurde. Einige dieser Informationen konnen fur Benutzer, die noch auf Altsystemen und mit alten Dokumenten arbeiten, nutzlich sein. Es werden Standards wie ASCII, GB 2312, ISO/IEC 8859, JIS, KOI8-R, KS und Unicode diskutiert. Der primare Fokus liegt auf Zeichensatzen, die tatsachlich durch lokale Zeichensatze verwandt wurden, nicht die Unzahl anderer, die auf anderen Systemen gefunden werden konnen. ASCII ASCII (American Standard Code For Information Interchange) ist der ursprungliche 7-bit-Zeichensatz, ursprunglich fur amerikanisches Englisch entwickelt. Auch als US-ASCII bekannt. Er wird derzeit durch die Norm ISO/IEC 646:1991-12 IRV (Internationale Referenzversion) beschrieben. Es bildeten sich verschiedene ASCII-Varianten heraus, die das Dollarzeichen durch andere Wahrungszeichen ersetzten und die Zeichensatzzeichen mit alphabetischen Zeichen jenseits des englischen ersetzten, um Deutsch, Franzosisch, Spanisch und andere in 7-bit darzustellen. Alle sind veraltet; Glibc unterstutzt keine Locales, deren Zeichensatze nicht eine wirkliche Obermenge von ASCII sind. Da Unicode bei der Verwendung von UTF-8 ASCII-kompatibel ist, werden reine ASCII-Dateien weiterhin auf modernen UTF-8-verwendenden Systemen korrekt dargestellt. ISO/IEC 8859 ISO/IEC 8859 ist eine Serie von 15 8-bit-Zeichensatzen, bei allen denen ASCII in ihrer niedrigen (7-bit-)Halfte, unsichtbare Steuerzeichen in Positionen 128 bis 159 und 96 Graphiken fester Breite in Positionen 160255 enthalten sind. Von diesen ist ISO/IEC 8859-1 (>>Lateinisches Alphabet Nr. 1<< / Latin-1) der Wichtigste. Es war breit akzeptiert und wurde von verschiedenen Systemen unterstutzt und wird allmahlich durch Unicode ersetzt. Die Zeichen aus ISO/IEC 8859-1 sind auch die ersten 256 Zeichen von Unicode. Konsole-Unterstutzung fur andere ISO/IEC-8859-Zeichensatze ist unter Linux mittels Hilfswerkzeugen im Anwendungsraum (wie setfont(8)) moglich, die die Tastaturanbindung und die EGA-Graphiktabelle andern und eine >>Benutzer-Abbildung<< der Schrifttabelle im Konsolentreiber einsetzen. Eine kurze Beschreibung jedes Zeichensatzes: ISO/IEC 8859-1 (Latin-1) Latin-1 deckt die meisten Sprachen wie Albanisch, Baskisch, Danisch, Englisch, Faroisch, Galizisch, Islandisch, Irisch, Italienisch, Norwegisch, Portugiesisch, Spanisch und Schwedisch ab. Das Fehlen der niederlandischen Ligaturen IJ/ij, des franzosischen oe und der ,,deutschen" Anfuhrungszeichen wurde als tolerierbar betrachtet. ISO/IEC 8859-2 (Latin-2) Latin-2 unterstutzt viele zentral- und osteuropaische Sprachen mit lateinischer Schrift wie Bosnisch, Kroatisch, Tschechisch, Deutsch, Ungarisch, Polnisch, Slowakisch und Slowenisch. Das Ersetzen der rumanischen / durch s/t wurde als tolerierbar betrachtet. ISO/IEC 8859-3 (Latin-3) Latin-3 wurde zur Abdeckung von Esperanto, Maltesisch und Turkisch entwickelt, aber ISO/IEC 8859-9 loste es fur Turkisch spater ab. ISO/IEC 8859-4 (Latin-4) Latin-4 fuhrte Buchstaben fur nordeuropaische Sprachen wie Estnisch, Lettisch und Litauisch ein, aber ISO/IEC 8859-10 und ISO/IEC 8859-13 losten es ab. ISO/IEC 8859-5 Kyrilische Buchstaben, die Bulgarisch, Belorussisch, Mazedonisch, Russisch, Serbisch und (fast vollstandig) Ukrainisch unterstutzen. Er wurde nie breit genutzt, siehe die nachfolgende Diskussion von KOI8-R/KOI8-U. ISO/IEC 8859-6 Wurde fur arabisch erstellt. ISO/IEC 8859-6 ist eine Bildzeichentabelle mit fester Schriftgrosse separater Buchstabenformen, aber eine korrekte Darstellungseinheit sollte sie unter Verwendung der korrekten Anfangs-, Mittel- und Endformen kombinieren. ISO/IEC 8859-7 Wurde 1987 fur modernes Griechisch erstellt und 2003 aktualisiert. ISO/IEC 8859-8 Unterstutzt modernes Hebraisch ohne Vokalisation (Satzzeichen). Vokalisation und vollstandiges biblisches Hebraisch waren ausserhalb des Anwendungsbereichs dieses Zeichensatzes. ISO/IEC 8859-9 (Latin-5) Dies ist eine Variante von Latin-1, die islandische Buchstaben durch turkische ersetzt. ISO/IEC 8859-10 (Latin-6) Latin-6 fugte die Inuit- (gronlandischen) und die Sami- (lappischen) Buchstaben hinzu, die Latin-4 fehlten, um den gesamten nordischen Raum abzudecken. ISO/IEC 8859-11 Unterstutzt das Thai-Alphabet und ist fast mit dem Standard TIS-620 identisch. ISO/IEC 8859-12 Dieser Zeichensatz existiert nicht. ISO/IEC 8859-13 (Latin-7) Unterstutzt die Sprachen des Baltikums; insbesondere enthalt es lettische Zeichen, die nicht Teil von Latin-4 sind. ISO/IEC 8859-14 (Latin-8) Dies ist der keltische Zeichensatz, der altes Irisch, die keltische Mundart der Bewohner der Insel Man, Galisch, Walisisch, Kornisch und Bretonisch abdeckt. ISO/IEC 8859-15 (Latin-9) Latin-9 ist dem breit benutzten Latin-1 ahnlich, ersetzt aber einige weniger haufige Symbole durch das Euro-Zeichen sowie franzosische und finnische Zeichen, die in Latin-1 fehlten. ISO/IEC 8859-16 (Latin-10) Dieser Zeichensatz deckt viele sudosteuropaische Sprachen ab, insbesondere unterstutzt es Rumanisch vollstandiger als Latin-2. KOI8-R / KOI8-U KOI8-R ist ein nicht-ISO-Zeichensatz, der in Russland vor Unicode beliebt war. Die untere Halfte ist ASCII; die obere Halfte ist der kyrillische Zeichensatz, etwas besser als ISO/IEC 8859-5 gestaltet. KOI8-U basiert auf KOI8-R und hat bessere Unterstutzung fur ukrainisch. Keiner dieser Satze ist ISO/IEC-2022-kompatibel, anders als die ISO/IEC-8859-Serie. Konsole-Unterstutzung fur KOI8-R ist unter Linux mittels Hilfswerkzeugen im Anwendungsraum verfugbar, die die Tastaturanbindung und die EGA-Graphiktabelle andern und eine >>Benutzer-Abbildung<< der Schrifttabelle im Konsolentreiber einsetzen. GB 2312 GB 2312 ist ein nationaler Zeichensatz von Kernland-China, der zum Ausdruck von vereinfachtem Chinesisch verwandt wird. Genau wie bei JIS X 0208 werden Zeichen in eine 94x94 Zwei-byte-Matrix zur Konstruktion von EUC-CN abgebildet. EUC-CN ist die wichtigste Kodierung fur Linux und enthalt ASCII und GB 2312. Beachten Sie, dass EUC-CN oft GB, GB 2312 oder CN-GB genannt wird. Big5 Big5 war ein in Taiwan beliebter Zeichensatz, um traditionelles Chinesisch auszudrucken (Big5 ist sowohl ein Zeichensatz als auch eine Kodierung). Es ist eine Obermenge von ASCII. Nicht-ASCII-Zeichen werden in zwei bytes dargestellt. Bytes 0xa10xfe werden als fuhrende Bytes fur Zwei-byte-Zeichen verwandt. Big5 und seine Erweiterungen wurde breit in Taiwan und Hong Kong verwandt. Es ist nicht ISO/IEC-2022-konform. JIS X 0208 JIS X 0208 ist ein japanischer nationaler Standardzeichensatz. Obwohl es noch einige weitere japanische nationale Standardzeichensatze gibt (wie JIS X 0201, JIS X 0212 und JIS X 0213) ist dies der wichtigste. Zeichen werden in eine 94x94-Zwei-byte-Matrix abgebildet, wobei jedes Byte im Bereich 0x210x7e liegt. Beachten Sie, dass JIS X 0208 ein Zeichensatz und keine Kodierung ist. Das bedeutet, das JIS X 0208 nicht selbst zum Wiedergeben von Textdaten verwandt wird. JIS X 0208 wird als Komponente zur Konstruktion von Kodierungen wie EUC-JP, Shift_JIS und ISO/IEC-2022-JP verwandt. EUC-JP ist die wichtigste Kodierung fur Linux und enthalt ASCII und JIS X 0208. In EUC-JP werden die Zeichen aus JIS X 0208 in zwei bytes ausgedruckt, wobei jedes in dem Code JIS X 0208 plus 0x80 ist. KS X 1001 KS X 1001 ist ein koreanischer nationale Standardzeichensatz. Wie bei JIS X 0208 werden Zeichen in eine 94x94-Zwei-byte-Matrix abgebildet. KS X 1001 wird wie JIS X 0208 verwandt, als Komponente, um Kodierungen wie EUC-KR, Johab und ISO/IEC-2022-KR zu konstruieren. EUC-KR ist die wichtigste Kodierung fur Linux und enthalt ASCII und KS X 1001. KS C 5601 ist ein alterer Name fur KS X 1001. ISO/IEC 2022 und ISO/IEC 4873 Die Normen ISO/IEC 2022 und ISO/IEC 4873 beschreiben ein Schrift-Steuermodell, basierend auf VT100-Vorgehen. Dieses Modell wird (teilweise) vom Linux-Kernel und xterm(1) unterstutzt. Mehrere ISO/IEC-2022-basierte Zeichensatze wurden definiert, insbesondere fur Japanisch. Es gibt 4 graphische Zeichensatze, genannt G0, G1, G2 und G3, und einer von ihnen ist der aktuelle Zeichensatz fur Codes mit dem hohen Bit Null (anfanglich G0), und einer von ihnen ist der aktuelle Zeichensatz fur Codes mit dem hohen Bit eins (anfanglich G1). Jeder graphischer Zeichensatz hat 94 oder 96 Zeichen und ist im wesentlichen ein 7-bit-Zeichensatz. Er verwendet entweder die Codes 0400177 (0410176) oder 02400377 (02410376). G0 hat immer die Grosse 94 und verwendet die Codes 0410176. Das Umschalten zwischen den Zeichensatzen erfolgt uber Umschaltfunktionen ^N (SO oder LS1), ^O (SI oder LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3), ESC ~ (LS1R), ESC } (LS2R), ESC | (LS3R). Die Funktion LSn macht Zeichensatz Gn zum aktuellen fur Codes mit dem hohen Bit null. Die Funktion LSnR macht Zeichensatz Gn zum aktuellen fur Codes mit dem hohen Bit eins. Die Funktion SSn macht Zeichensatz Gn (n=2 or 3) nur fur das nachste Zeichen zum aktuellen (unabhangig von dem Wert seinen Bits hoher Ordnung). Ein 94-Zeichen Satz wird durch eine Escape-Sequenz ESC ( xx (fur G0), ESC ) xx (fur G1), ESC * xx (fur G2), ESC + xx (fur G3) bezeichnet, wobei xx ein im internationalen Register von kodierten Zeichensatzen in ISO/IEC 2375 gefundenes Symbol oder ein Paar von Symbolen ist. Beispielsweise wahlt ESC ( @ den ISO/IEC-646-Zeichensatz als G0, ESC ( A wahlt den UK-Standardzeichensatz (mit Pfundzeichen statt des Nummernzeichens), ESC ( B wahlt ASCII (mit Dollarzeichen anstelle des Wahrungszeichens), ESC ( M wahlt einen Zeichensatz fur afrikanische Sprachen ESC ( ! A wahlt den kubanischen Zeichensatz und so weiter. Ein 96-Zeichen Satz wird durch eine Escape-Sequenz xx (for G1), ESC . xx (fur G2) oder ESC / xx (fur G3) als Gn-Zeichensatz bezeichnet. Beispielsweise wahlt ESC - G das hebraische Alphabet als G1. Ein Multibyte-Zeichensatz wird durch eine Escape-Sequenz ESC $ xx oder ESC $ ( xx (fur G0), ESC $ ) xx (fur G1), ESC $ * xx (fur G2), ESC $ + xx (fur G3) als Gn-Zeichensatz bezeichnet. Beispielsweise wahlt ESC $ ( C den koreanischen Zeichensatz fur G0. Der als ESC $ B ausgewahlte japanische Zeichensatz hat eine neuere Version, die durch ESC & @ ESC $ B ausgewahlt wird. ISO/IEC 4873 schreibt eine engere Verwendung von Zeichensatzen vor, wobei G0 fest (immer ASCII) ist, so dass G1, G2 und G3 nur fur Codes mit gesetztem Bit hoher Ordnung aufgerufen werden konnen. Insbesondere werden ^N und ^O nicht mehr verwandt, ESC ( xx kann nur mit xx=B verwandt werden und ESC ) xx, ESC * xx, ESC + xx sind aquivalent zu ESC - xx, ESC . xx bzw. ESC / xx. TIS-620 TIS-620 ist ein thailandischer nationaler Standardzeichensatz und eine Obermenge von ASCII. In der gleichen Art wie bei der ISO/IEC-8859-Serie werden thailandische Zeichen in 0xa10xfe abgebildet. Unicode Unicode (ISO/IEC 10646) ist eine Norm, die auf die eindeutige Darstellung jedes Zeichen in jeder menschlichen Sprache abzielt. Unicodes Struktur erlaubt 20,1 bits zur Kodierung jedes Zeichens. Da die meisten Computer keine 20,1-Ganzzahlen enthalten, wird Unicode normalerweise intern als 32-bit-Ganzzahl und entweder einer Reihe von 16-bit-Ganzzahlen (UTF-16) (wofur nur zwei 16-bit-Ganzzahlen bei der Kodierung bestimmter seltener Zeichen benotigt werden) oder einer Reihe von 8-bit-Bytes (UTF-8) kodiert. Linux stellt Unicode mittels des 8-bit-Unicode-Umwandlungsformats (UTF-8) dar. UTF-8 ist eine Unicode-Kodierung variabler Lange. Sie verwendet 1 byte, um 7 bits zu kodieren, 2 byte fur 11 bits, 3 byte fur 16 bit, 4 byte fur 21 bit, 5 byte fur 26 bit, 6 byte fur 31 bit. Im Folgenden steht 0,1,x fur Null, Eins und ein beliebiges Bit. Ein Byte 0xxxxxxx steht fur Unicode 00000000 0xxxxxxx, was das gleiche Symbol wie ASCII 0xxxxxxx kodiert. Daher gelangt ASCII unverandert in UTF-8 und daher bemerken Benutzer, die nur ASCII verwenden, keine Anderung; weder im Code noch in der Dateigrosse. Ein Byte 110xxxxx ist der Anfang eines 2-byte-Codes und 110xxxxx 10yyyyyy wird in 00000xxx xxyyyyyy zusammengesetzt. Ein Byte 1110xxxx ist der Anfang eines 3-byte-Codes und 1110xxxx 10yyyyyy 10zzzzzz wird in xxxxyyyy yyzzzzzz zusammengesetzt. (Wird UTF-8 zur Kodierung der 31-bit ISO/IEC 10646 verwandt, dann geht diese Reihe bis zum 6-byte-Code). Fur die meisten Texte im ISO/IEC 8859-Zeichensatz bedeutet dies, dass die Zeichen ausserhalb von ASCII jetzt in zwei bytes kodiert werden. Dadurch werden normale Textdateien nur um ein bis zwei Prozent vergrossert. Fur russische und griechische Texte werden die Textdateien um 100% vergrossert, da der Text in diesen Sprachen grosstenteils ausserhalb von ASCII ist. Fur japanische Benutzer bedeutet dies, dass die derzeit verbreiteten 16-bit-Codes drei bytes belegen werden. Es gibt zwar algorithmische Umwandlungen aus einigen Zeichensatzen (insbesondere ISO/IEC 8859-1) in Unicode, aber die allgemeine Umwandlung benotigt den Einsatz von Umwandlungstabellen, die fur 16-bit-Codes recht gross werden konnen. Beachten Sie, dass UTF-8 selbstsynchronisierend ist: 10xxxxxx ist der Rest und jedes andere Byte ist der Kopf eines Codes. Beachten Sie, dass ASCII-Bytes in einem UTF-8-Datenstrom nur als sie selbst vorkommen. Insbesondere gibt es keine eingebetteten Nullbytes (>>\0<<) oder >>/<<, die Teil eines grosseren Codes bilden. Da ASCII und insbesondere Nullbytes und >>/<< unverandert sind, bemerkt der Kernel nicht, dass UTF-8 verwandt wird. Ihm ist es total egal, wofur die Bytes stehen, mit denen er umgeht. Die Darstellung von Unicode-Datenstromen erfolgt normalerweise uber >>Teilschriftsatz<<-Tabellen, die eine Teilmenge von Unicode auf Schriftzeichen abbilden. Intern verwendet der Kernel Unicode, um den im Video-RAM geladenen Unterschriftsatz zu beschreiben. Das bedeutet, dass in der Linux-Konsole im UTF-8-Modus Zeichensatze mit 512 verschiedenen Symbolen verwandt werden konnen. Das ist fur Japanisch, Chinesisch und Koreanisch nicht genug, aber es reicht fur die meisten anderen Zwecke. SIEHE AUCH iconv(1), ascii(7), iso_8859-1(7), unicode(7), utf-8(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 28. Januar 2024 charsets(7)