Schriftkodierung im Internet (Tutorium)

Anleitung für die Verwendung von Nicht-ASCII-Zeichen im World Wide Web; von Jens Meyer

Erstellt am So., 30.11.2003

Stand der Bearbeitung: Mi.,04.08.2009

Anm.: Dieses Anleitung zur Kodierung von Nicht-ASCII-Schriftzeichen auf Web-Seiten ist nicht fertig, sondern ein vorläufiger Zwischenstand eines fortgesetzten Arbeitsprozesses. Konstruktive Kritik ist dem Autor Jens Meyer unter jens.meyer (at) e-workers.de jederzeit willkommen.

Inhaltsverzeichnis


Einleitung

Das Internet ist eine US-amerikanische Erfindung. Deswegen ist das einzige Schriftkodierungsverfahren, der zuverlässig in allen Diensten des Internet funktioniert, der "American Standard Code for Information Interchange" (ASCII; dt.: "Amerikanischer Standard-Code für den Informationsaustausch").

Deswegen sollten Web-Seiten (HTML-Dateien) ausschließ lich aus ASCII-Zeichen bestehen. Wer (zum Beispiel auf einer Website) Schriftzeichen verwenden möchte, die nicht zum ASCII gehören, sollte Vorkehrungen treffen, damit diese Schriftzeichen lesbar beim Empfänger eintreffen und nicht als Zeichenkauderwelsch. Wie man das macht, soll in diesem Tutorium erklärt werden.

Zum Inhaltsverzeichnis


Der "American Standard Code for Information Interchange" (ASCII)

Das einzige Kodierungsverfahren für Schriftzeichen, das zuverlässig in allen Diensten und in allen Protokollen des Internet funktioniert, ist der "American Standard Code for Information Interchange" (ASCII). Deswegen sollten Web-Seiten (HTML-Dateien) ausschließlich aus ASCII-Zeichen bestehen. ASCII ist ein Schriftkodierungsverfahren (engl.: "Character Encoding Scheme"; CES; Schriftkodierungsschema). In einem Schriftkodierungsschema wird jedes Textzeichen (Buchstabe, Ziffer, Satzzeichen, ...) einem bestimmten Byte-Wert zugeordnet. Im ASCII wird zum Beispiel das große A dem Wert 0041 (Nr. 65) zugeordnet, das Ausrufungszeichen dem Wert 0021 (Nr. 33) und so weiter. Jedem Textzeichen ist also ein bestimmter Byte-Wert und damit eine Ordnungszahl eindeutig zugeordnet.
Ein Byte besteht aus acht Bit. Jedes Bit hat einen von zwei möglichen Zuständen (Null oder Eins). Ein Byte kann also aus (2 hoch 8 gleich) 256 verschiedenen Kombinationen von Nullen und Einsen bestehen. In einem Byte können daher 256 verschiedene Zeichen kodiert werden, weil es 256 verschiedene Werte (zwischen 0 und 255) annehmen kann. Im ASCII belegt jedoch jedes Zeichen nur die ersten sieben der acht Bit eines jeden Bytes (das achte Bit jedes Bites wurde früher als so genanntes Paritäts-Bit zur Kontrolle verwendet, ob die Daten korrekt vom Sender zum Empfänger übertragen worden sind). Im ASCII sind daher nur (2 hoch 7 gleich) 128 Zeichen möglich.
Die ersten 32 Zeichen des ASCII werden als Kontroll- und Steuerzeichen benutzt, etwa für die Steuerung von Druckern. Diese Zeichen sind keine Textzeichen; sie sind nicht anzeig- oder druckbar. Im ASCII stehen daher nur (128 minus 32 gleich) 96 Code-Plätze für die Kodierung von Schriftzeichen zur Verfügung - (mehr als) genug, um die 26 Buchstaben des lateinischen Alphabets zu kodieren.

Welche Zeichen der ASCII umfasst, ist der beigefügten ASCII-Tabelle zu entnehmen.

Das Englische gehört (neben Latein) zu den sehr wenigen Sprachen weltweit, die mit den 26 Buchstaben des lateinischen Alphabets tatsächlich auskommen. In praktisch allen anderen Sprachen werden Sonderzeichen verwendet, zum Beispiel Akzente; in manchen auch besondere Buchstaben - ganz zu schweigen von Sprachen wie Griechisch, Russisch, Chinesisch, Japanisch, Koreanisch, Thailändisch, Arabisch, Hebräisch und so weiter, die nicht mit lateinischen Buchstaben geschrieben werden. Da der "American Standard Code for Information Interchange" jedoch, wie sein Name schon verrät, eine US-amerikanische Entwicklung ist, sind darin nur die Zeichen vorgesehen, die man zur Schreibung der englischen Sprache benötigt, nicht aber zum Beispiel die deutschen Umlaute oder das Esszett (ß), nicht die französischen Akzente und Ligaturen, von den vielen diakritischen Zeichen, die im Vietnamesischen verwendet werden, ganz zu schweigen. Diese Mängel des ASCII werfen einige Probleme auf, wenn man andere Sprachen als Englisch im Internet verwenden möchte. Wer sichergehen will, dass sein - zum Beispiel auf Deutsch verfasster - Text seine Adressaten in lesbarer Form und nicht als Zeichenkauderwelsch erreichen, muss alle nicht zum ASCII gehörenden Textzeichen in ASCII-Zeichen übersetzen (umkodieren). Dafür gibt es verschiedene Verfahren, die im Folgenden vorgestellt werden.

Die Tasten auf einer typischen deutschen Computer-Tastatur stimmen nicht mit dem Zeichenvorrat des "American Standard Code for Information Interchange" (ASCII) überein. Eine deutsche Computertastatur enthält sowohl Zeichen, die nicht zum ASCII gehören, als auch - umgekehrt - einige Zeichen nicht, die zum ASCII dazugehören. Die deutsche Computertastatur hat also einerseits mehr, andererseits aber auch weniger Zeichen als der ASCII.

Für folgende zum ASCII gehörende Zeichen gibt es auf einer deutschen Computertastatur keine Taste:

ASCII-Zeichen Nr. 124 (senkrechter Strich, |, engl.: "Pipe", hexadezimal: |) fehlt auf einer typischen deutschen Tastatur. Das Zeichen auf der Taste mit den spitzwinkeligen Klammern unten links ist der (nicht zum ASCII gehörende) "broken vertical bar", also der durchbrochene senkrechte Strich (Zeichen-Nr. 166, ¦ hexadezimal: ¦), und nicht der "Pipe".

ASCII-Zeichen Nr. 94 (Zirkumflex, ˆ hexadezimal: ^): Auf einer deutsche Tastatur befindet sich das Zirkumflex als "combining diacritical mark" (Unicode-Nr.770, hexadezimal: x0302); nicht das Zirkumflex als "spacing character" (Unicode-Nr. 94, hexadezimal x005E).

Die Tilde im ASCII (ASCII-Zeichen Nr. 126) ist das Unicode-Zeichen "Tilde" mit der hexadezimalen Zeichen-Nummer x007E (entspricht der dezimalen Unicode-Zeichennummer 126; ~). Es handelt sich also um den "spacing character" Tilde und nicht um den "combining diacritical mark" Tilde ("COMBINING TILDE" mit der hexadezimalen Unicode-Zeichennummer x0303 bzw. der dezimalen Unicode-Zeichennummer 771).

Bei dem Gravis-Akzent auf der Taste oben rechts auf der deutschen Tastatur (gleich neben der "Backspace"-Taste) handelt es sich um die "combining diacritical mark", nicht um den "spacing character" aus dem ASCII, also um das Zeichen mit der Unicode-Zeichennummer 768 (hexadezimal: 0300) und nicht um das Zeichen mit der ASCII-Zeichennummer 96 (hexadezimal: 0060).

Deutsche Computertastatur (Keyboard-Layout für Deutsch)

Vereinfachte Darstellung. Nicht-ASCII-Zeichen sind rot hervorgehoben

°
^
!
1
"
2  2
§
3  3
$
4
%
5
&
6
/
7  {
(
8  [
)
9  ]
=
0  }
?
ß  \
´
ˋ
|←
→|
Q
    @
W E
    
R T Z U I O P Ü *
+  ~
A S D F G H J K L Ö Ä '
#
>
<  ¦
Y X C V B N M
    µ
;
,
:
.
_
-

Folgende auf einer deutschen Computer-Tastatur vorhandenen Zeichen gehören nicht zum ASCII:

Nach Unicode-Zeichennummer steigend geordnet

Nr. dez. Nr. hex. Zeichen Deut. Bezeich. Engl. Bezeich. HTML-Entität
166 x00A6 ¦ Unterbrochener senkrechter Strich BROKEN BAR = BROKEN VERTICAL BAR = parted rule (in typography) &brvbar;
167 x00A7 § Paragraph SECTION SIGN * paragraph sign in some European usage &sect;
176 x00B0 ° Grad-Zeichen (Temperatur) DEGREE SIGN * this is a spacing character &deg;
178 x00B2 ² Hochgestellte 2 ("Quadrat") SUPERSCRIPT TWO = squared &sup2;
179 x00B3 ³ Hochgestellte 3 ("Kubik") SUPERSCRIPT THREE = cubed &sup3;
181 x00B5 µ Micro-Zeichen (griechisches Mü) MICRO SIGN &micro;
196 00C4 Ä Großes A mit Diaeresis (A-Umlaut) LATIN CAPITAL LETTER A WITH DIAERESIS &Auml;
214 x00D6 Ö Großes O mit Diaeresis (O-Umlaut) LATIN CAPITAL LETTER O WITH DIAERESIS &Ouml;
220 x00DC Ü Großes U mit Diaeresis (U-Umlaut) LATIN CAPITAL LETTER U WITH DIAERESIS &Uuml;
228 x00E4 ä Kleines a mit Diaeresis (a-Umlaut) LATIN SMALL LETTER A WITH DIAERESIS &auml;
246 x00F6 ö Kleines o mit Diaeresis (o-Umlaut) LATIN SMALL LETTER O WITH DIAERESIS &ouml;
252 x00FC ü Kleines u mit Diaeresis (u-Umlaut) LATIN SMALL LETTER U WITH DIAERESIS &uuml;
768 x0300 ̀ Gravis-Akzent (combining) COMBINING GRAVE ACCENT (Varia) = Greek varia  
769 x0301 ́ Akut-Akzent (combining) COMBINING ACUTE ACCENT (Oxia, Tonos) = stress mark = Greek oxia, tonos  
8364 x20AC Euro-Zeichen (Währungszeichen "Euro") EURO SIGN * currency sign for the European Monetary Union * euro, not ecu &euro;

Folgende ASCII-Zeichen können auf einer deutschen Computertastatur nur mit Hilfe der "AltGr"-Taste erzeugt werden:

Zeichen Deut. Bezeichng. Engl. Bezeichng. Unicode dezimal Unicode hexadez. Eingabe
{ Linke geschweifte Klammer (Accolade, Nasenklammer) LEFT CURLY BRACKET = OPENING CURLY BRACKET = opening brace &#0123; &#x007B; AltGr. + 7
[ Linke eckige Klammer LEFT SQUARE BRACKET = OPENING SQUARE BRACKET &#0091; &#x005B; AltGr. + 8
] Rechte eckige Klammer RIGHT SQUARE BRACKET = CLOSING SQUARE BRACKET &#0093; &#x005D; AltGr. + 9
} Rechte geschweifte Klammer (Accolade, Nasenklammer) RIGHT CURLY BRACKET = CLOSING CURLY BRACKET = closing brace &#0125; &#x007D; AltGr + 0
\ Umgekehrter Schrägstrich (backslash) REVERSE SOLIDUS = BACKSLASH &#0092; &#x005C; AltGr. + ß
@ "at-"-Zeichen ("Klammeraffe", "Affenschaukel") COMMERCIAL AT = Klammeraffe (common, humorous slang German name) &#0064; &#x0040; AltGr + q
~ Tilde (Rundungszeichen, Wellenlinie, näherungsweise) TILDE * this is a spacing character &#0126; &#x007E; AltGr. + +

Der ASCII enthält folgende (vermeintlichen) diakritische Zeichen (Akzente etc.):

47 / Slash; Schrägstrich (Virgel) SOLIDUS = SLASH = virgule, shilling (British) &#x002F;
94 ^ Zirkumflex CIRCUMFLEX ACCENT * this is a spacing character &#x005E;
96 ` Grave (accent grave) GRAVE ACCENT * this is a spacing character &#x0060;
126 ~ Tilde (Rundungszeichen, Wellenlinie, "näherungsweise", "ungefähr") TILDE * this is a spacing character &#x007E;

Der Akut-Akzent (frz.: "accent aigu"; engl.: "acute accent") gehört nicht zum ASCII. Er ist als "spacing character" unter der Zeichennummer 180 (hexadezimal: x00B4) im Unicode wie auch im ANSI-Zeichensatz zu finden; als "combining diacritical mark" hat der Akut im Unicode die Zeichennummer 769 (hexadezimal: x0301).

Diese vermeintlichen diakritischen Zeichen im ASCII lassen sich nicht mit einem Buchstaben kombinieren, es handelt sich nicht um "combining diacritical marks", sondern um "spacing characters". Es ist also nicht möglich, zum Beispiel aus den ASCII-Zeichen Nr. 47 (Schrägstrich) und Nr. 79 (großes O) das große O mit Schrägstrich (Ø) zusammenzusetzen. Ebensowenig kann man zum Beispiel aus dem ASCII-Zeichen Nr. 126 (Tilde) und Nr. 110 (kleines n) das kleine n mit Tilde (ñ) zusammensetzen.

Der ASCII eignet sich daher nur für lateinisch geschriebene Sprachen, die ohne diakritische Zeichen auskommen (wie Latein, Englisch, Niederländisch). Für Sprachen wie Französisch, Spanisch, Portugiesisch, Deutsch und so weiter reicht der Zeichenvorrat des ASCII nicht aus.

Zum Inhaltsverzeichnis


HTML-Entitäten

Der "American Standard Code for Information Intefchange" (ASCII) ist, wie gesagt, das einzige Schriftkodierungsverfahren, das zuverlässig in allen Internet-Protokollen, auch den älteren, funktioniert. Er enthält aber, wie dargelegt, nicht einmal annähernd alle benötigten Zeichen. Deswegen wurden Verfahren entwickelt, Nicht-ASCII-Zeichen in ASCII-Einheiten (so genannte Entitäten) umzuwandeln. Es gibt mehrere Möglichkeiten, Nicht-ASCII-Zeichen in Entitäten zu "übersetzen", die ausschließlich aus ASCII-Zeichen bestehen.

Das "World Wide Web Consortium" (W3C), ein Gremium, das für technische Standards und Normen im World Wide Web zuständig ist, hat für (fast) alle Sonderzeichen, die in den west-europäischen Sprachen verwendet werden, so genannte Entities festgelegt. Diese Entitäten dienen dazu, die Nicht-ASCII-Zeichen im Quelltext einer HTML-Datei so in ASCII-Zeichen umzukodieren, dass Web-Browser sie korrekt darstellen können.
Die Verwendung dieser HTML-Entities hat einen großen Vorteil und einen großen Nachteil gegenüber den weiter unten behandelten Unicode-Entitäten. Ihr Vorteil besteht darin, dass man sich relativ leicht merken kann, wie die Nicht-ASCII-Zeichen kodiert werden müssen, weil die Entitäten einigermaßen nachvollziehbare, "sprechende" Namen haben (anstatt aus einer abstrakten Zahl zu bestehen). Der Nachteil besteht darin, dass es bei Weitem nicht für alle lateinischen Sonderzeichen eine entsprechende HTML-Entität gibt, sondern nur für die in West-Europa gebräuchlichen, so dass man zwar zum Beispiel einen deutschen, dänischen oder französischen, nicht aber einen polnischen, tschechischen oder türkischen Text mit Hilfe von HTML-Entities kodieren kann.

Eine HTML-Entity wird immer von einem kaufmännischen Und (einem Ampersand; &) eingeleitet und durch ein Semikolon (;) abgeschlossen. Das Wort "größer" wird also mit Hilfe von HTML-Entities wie folgt kodiert: gr&ouml;&szlig;er
Bei den Namen der HTML-Entities ist die Groß- und Kleinschreibung zu beachten; &Auml; und &auml; sind nicht das gleiche Zeichen.
Es folgen die HTML-Entitäten für die wichtigsten deutschen Sonderzeichen.


Zeichen Unicode-Nr. HTML-Maskierung Beschreibung
Ä &#196; &Auml; Großes A Umlaut (Diaeresis)
ä &#228; &auml; Kleines a Umlaut (Diaeresis)
Ö &#214; &Ouml; Großes O Umlaut (Diaeresis)
ö &#246; &ouml; Kleines o Umlaut (Diaeresis)
Ü &#220; &Uuml; Großes U Umlaut (Diaeresis)
ü &#252; &uuml; Kleines u Umlaut (Diaeresis)
ß &#223; &szlig; Esszett, Ligatur aus s und z

 

Hier findet man einige Übersichten darüber, welche Sonderzeichen in welchen Sprachen verwendet werden.

Hier findet man eine Tabelle der vom W3C festgelegten HTML-Entities; alphabetisch nach dem Namen der Entity geordnet.

Es gibt für jedes druck- und darstellbare Zeichen des Unicode-Skripts "C1 Controls and Latin-1 Supplement" (das sind die Unicode-Zeichen Nr. 160 bis Nr. 255; hexadezimal: &#x00A0; bis &#x00FF;) eine HTML-Entity. Das Unicode-Skript "C1 Controls and Latin-1 Supplement" entspricht dem ANSI-Zeichensatz, einem vom "American National Standards Institute" (ANSI) festgelegten, weit verbreitetem Zeichensatz.

Hier findet man eine Tabelle des ANSI-Zeichensatzes.

Vereinzelt sind auch HTML-Entities für Unicode-Zeichen aus anderen ("höheren") Unicode-Skripten festgelegt worden; aber bei Weitem nicht vollständig.

Solange man eine Web-Seite also nur in einer (oder mehreren) west-europäischen Sprachen abfassen möchte, sind HTML-Entities eine sinnvolle Wahl für die Umkodierung der Nicht-ASCII-Zeichen in ASCII-Zeichen. Will man hingegen ost-europäische Sprachen verwenden oder gar solche, die nicht im lateinischen Alphabet geschrieben werden, kommt man mit HTML-Entities nicht weit. Dann muss man ein anderes Verfahren zur Umkodierung der Nicht-ASCII-Zeichen verwenden: Die im Folgenden beschriebenen Unicode-Entitäten.

Zum Inhaltsverzeichnis


Unicode-Entitäten

Unicode ist die landläufige Bezeichnung (und der eingetragene Markenname) für das "Universal Character Set" (USC; dt.: "Universeller Schriftzeichensatz"). Das universelle Zeichenkodierungsverfahren wird von den im Unicode Consortium (http://www.unicode.org) zusammengeschlossenen Computer-Unternehmen vereinbart und von der International Standardization Organization (ISO) genormt (in ISO/IEC 10646). Im Unterschied zu allen anderen Zeichenkodierungsverfahren (DOS-Zeichensatz, ASCII, ANSI-Zeichensatz, ISO-8859-Zeichensätze, EBCDIC und so weiter) ist das USC (zumindest seinem Anspruch nach) universell, das heißt: Alle Alphabete und Schriftzeichensysteme aller Sprachen und aller Zeiten der ganzen Welt können im USC kodiert werden - nicht nur das lateinische Alphabet, sondern zum Beispiel auch chinesische, japanische oder koreanische Schriftzeichen, keltische Runen, alt-ägyptische Hieroglyphen, mathematische und technische Symbole und so weiter.

Darin besteht der riesig Vorteil der Verwendung von Unicode-Entitäten gegenüber der Verwendung von HTML-Entitäten: Während die HTML-Entitäten nicht einmal für alle Sprachen ausreichen, die im lateinischen Alphabet geschrieben werden, können mit Unicode-Entitäten ALLE Sprachen geschrieben werden, selbst so komplexe wie Chinesisch.

Natürlich reichen die 256 verschiedenen Kombinationen aus Nullen und Einsen, die innerhalb eines Bytes möglich sind, für die Kodierung all dieser vielen Schriftzeichen nicht aus; allein für Chinesisch benötigt man mehr als 20.000 Zeichen. Deswegen verwendet das "Universal Character Set" schon auf seiner untersten Ebene, der "Basic Multilingual Plane" (BMP; Dt. etwa: "Grundlegende, vielsprachige Ebene") jeweils zwei Byte zur Kodierung jedes Schriftzeichens. Zwei Byte bestehen zusammen aus 16 Bit, bieten also (2 hoch 16 gleich) 65.536 verschiedenen Kombinationsmöglichkeiten von Nullen und Einsen. Auf der "Basic Multilingual Plane" sind also 65.536 verschiedene Zeichen möglich. Dieser Zeichenvorrat reicht für alle gängigen lebenden Sprachen aus.
Während der ASCII also nur ein "Single Byte Character Set" ist, ist das UCS ist ein "Double Byte Character Set".
In den chinesischen, japanischen und koreanischen Schriften werden zusammen etwa 31.000 Schriftzeichen verwendet. Da jedoch in der japanischen und chinesischen Sprache rund 10.000 Schriftzeichen (in der Schreibweise, wenn auch nicht unbedingt in der Bedeutung und Aussprache) übereinstimmen, brauchten im Unicode insgesamt "nur" rund 21.000 ost-asiatische Schriftzeichen festgelegt zu werden - mehr als für alle Alphabete (lateinisch, kyrillisch, griechisch, arabisch, armenisch, hebräisch, thailändisch, äthiopisch, georgisch, tibetisch und so weiter) zusammen.

Im Unicode sind alle Textzeichen (Ziffern, Buchstaben, Ideogramme, Symbole, Satz- und Sonderzeichen) sozusagen fortlaufend durchnummeriert, so dass jedes Zeichen eine eindeutige Nummer (einen einmaligen Byte-Wert) hat. Diese Nummer ist abstrakt und daher schwer zu merken. Darin besteht der Nachteil bei der Verwendung von Unicode-Entitäten gegenüber der Verwendung von HTML-Entitäten - Während man sich ganz gut merken kann, dass die HTML-Entität für das Ä &Auml; (A-Umlaut) ist, fällt es schwer, zu behalten, dass die entsprechende Unicode-Entität &#196; in dezimaler und &#x00C4; in hexadezimaler Schreibweise lautet.

Zum UCS-2 gehören auch mehrere Steuerzeichen, darunter das für die Schreibrichtung von rechts nach links (RIGHT-TO-LEFT MARK; &#x200F; bzw. RIGHT-TO-LEFT EMBEDDING; &#x202B;).Das Steuerzeichen für die Schreibrichtung von rechts nach links wird zum Beispiel für Arabisch und Hebräisch benötigt.

Das "World Wide Web Consortium" (W3C) hat den Unicode in den Standard der "HyperText Markup Language" (HTML 4.0) aufgenommen.

Theoretisch ist es relativ einfach, jedes beliebige Unicode-Zeichen in einem HTML-Dokument zu verwenden. Dazu schlägt man in den Unicode-Zeichentabellen nach, welchen Byte-Wert (= welchen Code-Punkt = welche laufende Nummer) das gewünschte Zeichen hat. Dann kann das betreffende Unicode-Zeichen als numerische Notation in den Quelltext der HTML-Datei eingefügt werden. Man gibt also (in einer bestimmten, festgelegten Schreibweise/ Syntax) die Nummer des Nicht-ASCII-Zeichens in den Quelltext der HTML-Datei ein und der Browser zeigt das betreffende Zeichen an - sofern er Unicode-fähig ist und in seinen Fonts die erforderliche Glyphe vorhanden ist (Näheres dazu unten im Kapitel "character" und "glyphe").

Es gibt zwei (gleichwertige) Möglichkeiten, die Zeichennummer als Unicode-Entität in den HTML-Quelltext zu setzen, nämlich in dezimaler und in hexadezimaler Schreibweise. Die korrekte Syntax für die dezimale Kodierung von Nicht-ASCII-Zeichen ist:

&#[dezimale Zeichennummer];

Die dezimale Entität wird also eingeleitet durch das kaufmännische Und (&, Ampersand), dann folgt das Nummer-Zeichen (#; auch "Schweinegatter", "Raute", "mesh" oder "pound" genannt), dann die dezimale Zeichen-Nummer und zum Schluss das Semikolon (Strichpunkt).

Die korrekte Syntax für die hexadezimale Kodierung von Nicht-ASCII-Zeichen in HTML lautet:

&#x[hexadezimale Zeichennummer];

Die hexadezimale Entität wird also eingeleitet durch das kaufmännische Und (&), dann folgt das Nummer-Zeichen (#), dann ein kleines x, dann die hexadezimale Zeichen-Nummer und zum Schluss das Semikolon (;). Die hexadezimale Schreibweise wird also anhand des dem Zahlenwert vorangestellten "x" von der Dezimal-Schreibweise unterschieden.

Will man zum Beispiel das Ä (A-Umlaut bzw. A Diaeresis) als Unicode-Entität kodieren, muss man wie folgt vorgehen:

  1. Zunächst muss man die korrekte Unicode-Zeichennummer des gewünschten Zeichens ermitteln. Dabei helfen die Sonderzeichen-Tabellen auf dieser Website. Darüber hinaus bietet das Unicode-Consortium auf seiner Website eine umfangreiche Text-Datei, in der man die Hexadezimalkodierung des gesuchten Zeichens findet, sofern man dessen Bezeichnung ("alias name") kennt. Die "alias names" sind in ISO/IEC 6429:1992 festgelegt. In der Text-Datei des Unicode-Consortiums werden zusätzlich zu den offiziellen "alias names" auch die landläufig gebräuchlichen Bezeichnungen der Textzeichen angegeben (allerdings nur auf Englisch). Das Ä (A-Umlaut) trägt die Bezeichnung (den "alias name") LATIN CAPITAL LETTER A WITH DIAERESIS, gehört zum Unicode-Skript "C1 Controls and Latin-1 Supplement" und hat den Byte-Wert 00C4. Dieser Hexadezimalwert entspricht dem Dezimalwert 196. In dem sehr empfehlenswerten HTML-Tutorium "SelfHTML" von Stefan Münz findet man unter "kleine Helferlein" einen sehr praktischen Rechner, mit dem man auf Knopfdruck Hexadezimal- in Dezimalwerte umrechnen kann und umgekehrt.
  2. Dem ermittelten Hexadezimalwert stellt man &#x voran und ; nach. Für das Ä (A-Umlaut) ergibt sich daraus die Hexadezimalkodierung &#x00C4;
    Falls man statt des Hexadezimalwertes lieber den Dezimalwert verwenden möchte, stellt man diesem &# voran und ; nach. Für das Ä (A-Umlaut) ergibt sich daraus die Dezimalkodierung &#196;.
    Diese Entität setzt man für den Buchstaben Ä (A-Umlaut) in den Quelltext der HTML-Datei. Der Quelltext für das Wort "Änderung" ist also &#x00C4;nderung in hexadezimaler und &#196;nderung in dezimaler Schreibweise. Welche der beiden Schreibweisen verwendet wird, ist, wie gesagt, gleichgültig; das Ergebnis im Browser ist das gleiche.

Im Falle des A-Umlaut kann man anstelle der (hexadezimalen oder dezimalen) Unicode-Entität natürlich auch die HTML-Entität &Auml; verwenden. Auch für alle anderen Zeichen des ANSI-Zeichensatzes steht eine HTML-Entität zur Verfügung. Aber der ANSI-Zeichensatz deckt nur (mehr oder weniger) den Zeichenbedarf für die im lateinischen Alphabet geschriebenen, west-europäischen Sprachen ab. Will man aber zum Beispiel Polnisch, Tschechisch oder Griechisch schreiben, kommt man mit den HTML-Entitäten nicht aus, dann ist Unicode die einzige Möglichkeit, den Text sauber zu kodieren.

Zum Inhaltsverzeichnis


Zeichensatz-Deklaration

Ein möglicher Grund dafür, das korrekt kodierte Nicht-ASCII-Zeichen im Browser gleichwohl nicht korrekt angezeigt werden, kann in der fehlenden oder falschen Zeichensatzdeklaration im Kopf ("head") der HTML-Datei liegen.

Die Zeichensatz-Deklaration im "Head" der HTML-Datei für ISO 8859-1 ("Latin-1") lautet:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Dadurch wird der Zeichensatz ISO-8859-1 festgelegt (das ist der normale Zeichensatz für westeuropäische Sprachen, unter anderem auch für Deutsch).

Die Zeichensatz-Deklaration im Kopf einer HTML-Seite für UFT-8 lautet:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

"UTF" steht für "USC Transformation Format" (Dt.: "UCS-Umformungsformat"). "UCS" steht dabei für "Universal Character Set" (Dt.: "Universeller Schriftzeichen-Satz"). In UCS-2 wird jedes Textzeichen mit zwei Byte (also in einem 16 Bit langen Datenwort) kodiert.

In vielen gängigen Anwendungsprogrammen und Datenübertragungsprotokollen sind jedoch nur Zeichensätze vorgesehen, in denen jedes Schriftzeichen mit einem Byte (also acht Bit) kodiert ist. Daher ist das "Universal Character Set" mit vielen älteren, aber noch gebräuchlichen Programmen und Datenübertragungsverfahren unvereinbar. Deswegen wurden für die Code-Umsetzung zwischen Ein-Byte- und Zwei-Byte-Zeichensätzen mehrere "UCS Transformation Formats" (UTF; Dt.: "UCS-Umwandlungsformate") mit unterschiedlichen Eigenschaften für verschiedene Zwecke entwickelt.

UTF-8 ist eines dieser Umwandlungsformate für das "Universal Character Set". UTF-8 wird im Internet viel eingesetzt. Die Ziffer 8 in "UTF-8" weist darauf hin, dass in diesem Kodierungsverfahren jedes Zeichen mit acht Bit dargestellt wird, während in UCS-2 jedes Zeichen mit 16 Bit kodiert wird.

Die ersten 256 Zeichen in UCS-2 entsprechen dem "ISO Latin-1"-Zeichensatz (ISO 8859-1); da "Latin-1" allerdings nur 8 Bit pro Zeichen verwendet und UCS-2 16 Bit, werden bei den Unicode-Zeichen nicht benutzte Bit-Stellen durch Leerstellen aufgefüllt, die in "Latin-1" keinen Sinn ergeben und zu Zeichenkauderwelsch führen. So ist der Buchstabe A in ASCII in Hexadezimalschreibweise "41"; in UCS-2 wird das große A hingegen in Hexadezimalschreibweise als "0041" wiedergegeben. Durch Umkodierung mit Hilfe des Transformationsformats UTF-8 kann man die mit 16 Bit kodierten Unicode-Zeichen auch in einer 8 Bit-Umgebung verwenden. Durch die Transformation werden keine zusätzlichen ASCII-Zeichen erzeugt.

UTF-8 ist im "Request For Comments" (RFC) Nr. 2279 beschrieben.

Erlaubt sind daneben auch die Zeichensatzangaben, die unter der Web-Adresse http://www.iana.org/assignments/character-sets aufgeführt sind.

Zum Inhaltsverzeichnis


"character" und "glyphe"

Selbst, wenn auf einer Web-Seite alle Nicht-ASCII-Zeichen korrekt als Unicode- oder als HTMl-Entitäten kodiert sind, zeigt der Browser unter Umständen Kästchen oder Fragezeichen anstelle der Sonderzeichen an. Dass eine Web-Browser "Unicode-fähig" ist, bedeutet nur, dass er das Doppel-Byte-Kodierverfahren grundsätzlich beherrscht; es bedeutet aber leider durchaus nicht, dass er auch alle darin kodierten Zeichen tatsächlich anzeigen kann. Unicode definiert zwar einen eindeutigen Byte-Wert für (nahezu) alle Textzeichen, löst jedoch nicht das Problem, wie alle diese Zeichen auf einem Computer dargestellt werden können. Unicode definiert nur Zeichenwerte und Eigenschaften von Zeichen, enthält aber keine Angaben darüber, wie das Zeichen zum Beispiel auf dem Bildschirm oder im Druck darzustellen ist. Herkömmliche Computer-Schriftarten (Fonts) reichen dazu nicht aus und neue Schriftarten, die wenigstens einen großen Teil der Unicode-Zeichen bereitstellen, verbreiten sich erst allmählich. Es genügt also nicht, dass ein Betriebssystem oder ein Anwendungsprogramm Unicode-konform ist, es muss auch über die erforderlichen Fonts verfügen, um die Unicode-Zeichen tatsächlich darzustellen.
Man unterscheidet in diesem Zusammenhang zwischen einem Textzeichen ("character") und dem graphischen Zeichen zu seiner Darstellung (Glyphe). A, A und A sind drei verschiedene Glyphen für denselben Buchstaben. Im Unicode sind "character" definiert, aber mit den Glyphen zu deren Darstellung befasst Unicode sich nicht.

Zum Inhaltsverzeichnis


Links zum Thema Sonderzeichen und Unicode

Lexitron.de - Schriftkodierung
Teil-Lexikon zum Thema Schriftkodierung des deutschen Computer-Lexikons von Jens Meyer
http://www.lexitron.de/main.php?cat_index=true&cat=35

Overview of European Diacritics
by John Hudson; Tiro.com. Übersicht über die Benennung der einzelnen Diakritika und über die diakritischen Zeichen, die in bestimmten europäischen Sprachen verwendet werden.
http://www.tiro.com/di_intro.html

ISO 8859-2 Character Set
Der ISO-Zeichensatz für die (ost-)europäischen Sprachen: Albanisch, Bosnisch, Deutsch, Englisch, Finnisch, Irisch (Gälisch), Kroatisch, Polnisch, Rumänisch, Serbisch (lateinische Transkription), Slowakisch, Slovenisch, Sorbisch (Lusatian), Tschechisch, Ungarisch
http://nl.ijs.si/gnusl/cee/charset.html

Font.org: Mittel- und osteuropäische Zeichen in HTML
Über die korrekte Kodierung ost-europäischer Sonderzeichen in HTML.
http://studweb.euv-frankfurt-o.de/twardoch/f/de/comp/net/ce-html.html

Gymel.com: Zeichentabellen
DOS-Zeichensätze, Windows-Zeichensätze, ISO-8859-Zeichensätze, Bibliothekarische Zeichensätze
http://www.gymel.com/charsets/

Stefan Münz (SelfHTML): HTML-Zeichenreferenz
Tabelle über die HTML-Maskierung von Sonderzeichen
http://http://de.selfhtml.org/html/referenz/zeichen.htm

Unicode.org: Unicode Character Name Index
Hier kann man nachschlagen, in welchem Unicode-Zeichensatz (Skript) man ein bestimmtes Zeichen findet
http://www.unicode.org/charts/charindex.html

Unicode.org: Code Charts (PDF Version)
Die Unicode-Scripte und ihre Zeichen als PDF-Dateien
http://www.unicode.org/charts/

Alan Wood's Unicode Resources
Unicode and Multilingual Support in HTML, Fonts, Web Browsers and Other Applications
http://www.alanwood.net/unicode/

Online-Datenbank der Sonderzeichen

Von Indrek Hein vom Eesti Keele Instituut - Institute of the Estonian Language. You can e.g. search for Unicode characters by name or code position, get lists of differences between some character sets, and get lists of characters needed for different languages.
http://www.eki.ee/letter/

Tutorial on character code issues

Sehr gute Einführung in die Sonderzeichen-Kodierung; auf Englisch. Mit weiterführenden Links.
http://www.cs.tut.fi/%7Ejkorpela/chars.html

One world publishing

Auf Deutsch.
http://one-world-publishing.de/

Diffuse.org: Guide to Character Sets

Überblick über die verschiedenen Zeichensätze (Character Encoding Schemes)
http://www.diffuse.org/charguide.html

Character Model for the World Wide Web 1.0

W3C Working Draft; 30.April 2002
http://www.w3.org/TR/charmod/

UTF-8 and Unicode FAQ for Unix/ Linux

Nicht nur für Unix/ Linux von Interesse.
http://ijstokes.paunix.org/unicode/unicode.html

Typeforum.de

http://www.typeforum.de/

Zum Inhaltsverzeichnis