Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: FAQ - DOS und Win32-Konsole ::  Deutsche Umlaute     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
SideWinder
Moderator

Benutzerprofil
Anmeldungsdatum: 19.10.2001
Beiträge: 19118
Beitrag SideWinder Moderator 15:41:00 01.01.2002   Titel:   Deutsche Umlaute            Zitieren

Deutsche Umlaute werden in der Win32-Konsole falsch angezeigt. Der Grund dafür sind Zeichensatz-Inkompatibilitäten. Während man während der Programmierung zumeist den ASCII-Zeichensatz verwendet, wird in der Konsole mit einem ANSI-Zeichensatz gearbeitet.

Die Lösung: Anstatt des Zeichens fügt man während der Programmierung den ANSI-Code des Umlauts ein.

1. Variante: Die ANSI-Codes werden als 'unsigned char' in Konstanten gespeichert. Während der Programmierung benötigt man dann kein weiteres Wissen über die einzelnen ANSI-Codes der Umalute, dafür hat man auch einen erhöhten Programmieraufwand:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// C-Version:
#define AE (unsigned char)142
#define ae (unsigned char)132
#define OE (unsigned char)153
#define oe (unsigned char)148
#define UE (unsigned char)154
#define ue (unsigned char)129
#define ss (unsigned char)225
// Verwendungsbeispiel
printf("%cbung macht den Meister!\n",UE);
 
// C++-Version:
const unsigned char AE = static_cast<unsigned char>(142);
const unsigned char ae = static_cast<unsigned char>(132);
const unsigned char OE = static_cast<unsigned char>(153);
const unsigned char oe = static_cast<unsigned char>(148);
const unsigned char UE = static_cast<unsigned char>(154);
const unsigned char ue = static_cast<unsigned char>(129);
const unsigned char ss = static_cast<unsigned char>(225);
// Verwendungsbeispiel
cout << UE << "bung macht den Meister!" << endl;


2. Variante: Die ANSI-Codes der Umlaute werden über Escapesequenzen hexadezimal oder oktal in Strings eingefügt:
Code:
1
2
3
4
5
6
7
8
9
 Zeichen     Hex    Okt
========================
   'Ä'       8E     216
   'ä'       84     204
   'Ö'       99     231
   'ö'       94     224
   'Ü'       9A     232
   'ü'       81     201
   'ß'       E1     341

C++:
// Verwendungsbeispiel
printf("Heute ist ein sch\x94ner Tag!\n"); // \x leitet eine Hexadezimal-Escapesequenz ein
cout << "Heute ist ein sch\x94ner Tag!" << endl;

Diese Version hat allerdings einen Haken: Ist das nächste Zeichen ebenfalls hexadezimal bzw. oktal darstellbar, wird dieses Zeichen mitinterpretiert. Zum Beispiel würde im Wort "Oberfl\x84che" nicht '\x84' mit 'ä' ersetzt werden sondern 'x84c' mit der Zahl '2124'. Für dieses Problem gibt es allerdings einen kleinen Trick:
C++:
cout << "Oberfl\x84 \bche" << endl;

Nach dem Hex-Code fügt man ein Leerzeichen hinzu, dass sofort danach wieder mit der Escapesequenz '\b' für die Rücktaste wieder gelöscht wird (Dankeschön an einen unbekannten Zusender).

MfG SideWinder

PS: Wenn ihr Fehler findet, meldet euch bitte umgehend.


Zuletzt bearbeitet von SideWinder am 15:12:11 24.01.2006, insgesamt 18-mal bearbeitet
Werbeunterbrechung
C++ Forum :: FAQ - DOS und Win32-Konsole ::  Deutsche Umlaute   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.