…
Das Konsolenfenster nutzt üblicherweise einen Pixelfont, der aber versteht nur 8-Bit-Zeichen. Wird das Konsolenfenster auf die Nutzung eines geeigneten TrueType-Fonts umgestellt (Lucida Console, Andale Mono*, Consolas *), dann können auch 16-Bit-Unicode-Zeichen ausgegeben werden; je nach verwendetem Font ist die Unterstützung mehr oder weniger ausführlich.
Leider hat MS keinen Weg dafür vorgesehen, per Software den Konsolenfont auszuwählen, das muss manuell erfolgen.
Der Pixelfont ist üblicherweise für Codepage 850 eingerichtet, das entspricht weitestgehend dem Textzeichensatz alter DOS-PCs. Daher werden auch ANSI-Umlaute nicht korrekt ausgegeben; das funktioniert erst nach Umstellen der Konsolencodepage auf 1252 (für ANSI-Zeichensatz).
*) geht nur nach Registry-Manipulation:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont] "0"="Lucida Console" "00"="Andale Mono" "000"="Consolas"
Kann man die Codepage in der Konsole umstellen ?
Also nicht global im gesamten Windows, sondern nur lokal während der Laufzeit des Programmes ?
Ja. Für eine laufende Konsolensitzung geht das mit
mode con cp select=1252
In einer Konsolenanwendung selbst geht das mit den Win32-API-Funktionen
SetConsoleOutputCP(1252); SetConsoleCP(1252);
Um die alte zu restaurieren, kann diese vorher mit
GetConsoleOutputCP(); GetConsoleCP();
bestimmt werden.
Jedoch funktioniert das Umstellen der Codepage nur mit dem von in der Konsole standardmäßig verwendeten Schriftart - ist die Pixelschrift aktiv, hilft das Umstellen der Codepage gar nichts, wenn Unicode-Zeichen ausgegeben werden sollen, die nicht in der Pixelschrift enthalten sind. Und die Pixelschrift enthält halt nur die zu Codepage 850 gehörenden Zeichen.
Umlaute werden dann korrekt umgesetzt, aber griechische, kyrillische oder auch mathematische Zeichen funktionieren nicht. Nicht nur deswegen ist es äußerst ratsam, in der Konsole eine TrueType-Schriftart wie Andale Mono o.ä. zu verwenden. Übrigens funktionieren andere als die oben erwähnten Schriftarten nicht in Konsolfenstern, selbst wenn diese nichtproportional sind; die Courier New beispielsweise kann zwar wie oben angegeben in der Registry eingetragen werden, Windows akzeptiert sie aber trotzdem nicht.