5.12 Nationale contra internationale Zeichensätze
Der ASCII-Zeichensatz (American Standard Code for Information Interchange) wurde von US-amerikanischen Ingenieuren entwickelt. Zur damaligen Zeit wurde als achtes Bit das Paritätsbit benutzt, womit nur noch sieben Bits zur Verfügung standen; also gab es Platz für 128 Zeichen und Sonderzeichen.
Nun fehlte der Platz für westeuropäische und slawische Zeichen (von der japanischen Schrift mit über 40.000 Zeichen und der kyrillischen Schrift ganz zu schweigen). Man beschränkte sich also auf die Zeichen, die im Englischen benötigt wurden.
Als die Europäer mit ihren landestypischen Zeichen ebenfalls in die ASCII-Tabelle aufgenommen werden wollten, war es schon zu spät. Wie Sie an der ASCII-Code-Tabelle sehen können, befinden sich unter den 128 Zeichen, die in 7 Bits Platz haben, keine Umlaute wie zum Beispiel »äöüßÄÖÜß« oder landestypische Zeichen anderer europäischer Länder wie etwa französische.
Jetzt war die ISO (International Organisation for Standardization) gefragt. Der ASCII-Zeichensatz wurde auf 8 Bits erweitert und unter der Bezeichnung »utf-8«, »ISO-8859-2« usw. etabliert. Der westeuropäische Standard ist in der »ISO-8859-1« erfasst. Damit lassen sich folgende Zeichen darstellen:
/* iso_ascii.c */ #include <stdio.h> int main(void) { int i; for(i=0; i < 254; i++) { if(i==27) // ESC-Zeichen ignorieren continue; printf(" |%d : %c| ",i,i); } return 0; }
Die deutschen Sonderzeichen in oktaler Form können auch folgendermaßen ausgegeben werden (unter einer MS-Windows-Konsole):
/* umlaute.c */ #include <stdio.h> int main(void) { printf("R\204tsel, \231l, \232berfall\n"); printf("Umlaute oktal : \204\216\224\231\201\232\341\n"); return 0; }
Das Problem mit den deutschen Sonderzeichen unter der Windows-Konsole ist, dass diese nicht den gewöhnlichen Windows-Zeichensatz verwendet, sondern einen OEM-Zeichensatz. Deshalb müssen Sie in diesem Fall einen Umweg machen. Mit Linux haben Sie dieses Problem nicht.
Um in diesem Zusammenhang nochmals auf char zurückzukommen: Der Wertebereich von char ist außerdem auch abhängig von dem Zeichensatz, der vom eingesetzten Rechner und dessen Betriebssystem verwendet wird. Hierbei sind folgende Zeichensätze (Codes) verbreitet (ohne hier zu sehr ins Detail zu gehen):
Zeichensatz | Ordinalwert | Speicherbedarf | Bemerkung |
ASCII |
0 ... 127 |
7 Bit |
|
OEM |
0 ... 255 |
8 Bit |
Mit ASCII-Code |
ANSI |
0 ... 255 |
8 Bit |
Mit ASCII-Code |
ISO-Latin-1 |
0 ... 255 |
8 Bit |
Mit ASCII-Code |
Unicode |
0 ... 65535 |
16 Bit |
Mit ASCII-Code |
EBCDIC |
0 ... 255 |
8 Bit |
Die Zeichensätze mit einem Speicherbedarf von maximal 8 Byte werden in C gewöhnlich mit dem Datentyp char dargestellt. Für den Unicode-Zeichensatz wird der Datentyp wchar_t verwendet.
Im Zusammenhang mit den verschiedenen Zeichensätzen sind folgende Probleme zu beachten:
- Die Ordnung der Zeichen kann sich in den verschiedenen Zeichensätzen unterscheiden.
- Einem Ordinalwert können in unterschiedlichen Zeichensätzen verschiedene Zeichen entsprechen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.