SetConsoleOutputCP() funktioniert nur manchmal :(

30/10/2007 - 12:43 von Dirk Clemens | Report spam
Hallo,

ich habe ein Problem mit SetConsoleOutputCP().

Ich kann mit SetConsoleCP() und SetConsoleOutputCP() die Codepage für
Ein- und AUsgabe setzen. Starte ich das Programm (siehe unten) aus
einem CMD-Fenster, dann fnktioniert alles wie gewünscht:

| CP:850,850
| Umlaute: xxx xxxx (kryptische Zeichen)
| Eingabe: àöü
| Ausgabe: 84 94 81 -> àöü
|
| stat=1,1
|
| CP:1250,1250
| Umlaute: ÄÖÜ àöüß
| Eingabe: àöü
| Ausgabe: e4 f6 fc -> àöü

Anmerkungen:
- Die Umlaute ÄÖÜ àöüß sind im Quelltext gemàß CP1250 angegeben.
Bei der ersten Ausgabe mit CP850 kommen dann korrekterweise
kryptische Zeichen heraus, die hier als 'xxx xxxx' dargestellt sind.
- Bei Eingabe und Ausgabe mit CP1250 erscheint die drei einegebenen
Umlaute àöü dann korrekt. Anhand des HexDumps kann man erkennen, dass
die Zeichen tatsàchlich in CP1250-Format vorliegen.

Bis hier hin ist alles wie gewünscht!

Nun starte ich das Programm direkt, also ohne CMD direkt via Explorer.
Dann ergibt sich die folgende Ausgabe:

| CP:850,850
| Umlaute: xxx xxxx (kryptische Zeichen)
| Eingabe: àöü
| Ausgabe: 84 94 81 -> àöü
|
| stat=1,1
|
| CP:1250,1250
| Umlaute: xxx xxxx (kryptische Zeichen)
| Eingabe: xxx (kryptische Zeichen)
| Ausgabe: e4 f6 fc -> xxx (kryptische Zeichen)

Anmerkungen:
- Das System meldet zurück, dass die CP geàndert wurde.
Bei der Eingabe scheint es zu stimmen, aber die Ausgabe wird
weiterhin in CP850 gesetzt.

- Starte ich das Programm aus dem Visual Studio mit F5 (Debuggen),
dann habe ich denselben Effekt mit der falschen Ausgabe.
Beim Start mit CTRl-F5 (Starten ohne Debuggen) verhàllt sich
das Programm dagegen korrekt wie im ersten Fall.

Hat jemand Ideen, warum die Umschaltung nicht funktioniert
bzw. wie man das Fehlverhalten ausschließt?

Dirk


P.S.: Und hier das Test-Programm:

void test()
{
unsigned icp = GetConsoleCP();
unsigned ocp = GetConsoleOutputCP();
printf("CP:%d,%dUmlaute: ÄÖÜ àöüßEingabe: ",icp,ocp);
fflush(stdout);
char buf[1000];
memset(buf,0,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
printf("Ausgabe: %02x %02x %02x -> %s",
(unsigned char)buf[0],(unsigned char)buf[1],
(unsigned char)buf[2],buf);
}

int main ( int argc, char ** argv )
{
test();

int stat1 = SetConsoleOutputCP(1250);
int stat2 = SetConsoleCP(1250);
printf("stat=%d,%d",stat1,stat2);

test();

SetConsoleOutputCP(850);
SetConsoleCP(850);

printf("PRESS KEY...");
getchar();
return 0;
}

Mail bitte an: lemmi (minus) usenet (at) ftb (minus) net (dot) de
 

Lesen sie die antworten

#1 Dirk Clemens
31/10/2007 - 09:59 | Warnen spam
Dirk Clemens schrieb:
Hallo,

ich habe ein Problem mit SetConsoleOutputCP().



Offensichtlich hat kein anderer dieses Problem.
Daher meine neue Frage:
Wie gebt ihr Umlaute auf der Konsole aus?

Dirk


Mail bitte an: lemmi (minus) usenet (at) ftb (minus) net (dot) de

Ähnliche fragen