2013-03-15 14 views
7

Ich mache diese einfache Ausgabe von einer Unicode-gebauten Konsolenanwendung (mit C++ und Visual Studio 2008). Dieser Code soll unter Windows laufen:_tprintf mit Unicode-Zeichen in einer Konsolenanwendung

_tprintf(L"Some sample string\n"); 

Alles funktioniert gut. Aber wenn ich ein Nicht-ASCII-Zeichen in es hinzuzufügen:

_tprintf(L"Some sample € string\n"); 

was auf die Konsole bekommt, ist alles bis zu diesem Zeichen:

Einig Probe

Was mache ich falsch Hier?

+2

Dies liegt daran, dass Ihre Konsole dieses Zeichen nicht anzeigen kann. Die Konvertierung von Unicode in die 8-Bit-Codepage schlägt fehl und die Zeichenfolge wird abgeschnitten. Die Standard-Codepage für eine Konsole ist normalerweise 437, die alte IBM PC-Codepage, eine Maschine, die entworfen wurde, bevor Europa seine neue Währung annahm. Sie müssen die Konsole auf eine andere Codierung umstellen, die das Zeichen SetConsoleOutputCP() enthält. –

+0

Ich habe gerade versucht, 'SetConsoleOutputCP (1200);' vor diesem Anruf und nichts geändert. – ahmd0

+2

geben Sie _setmode (_fileno (stdout), _O_WTEXT); ein Versuch – Cubbi

Antwort

7

Standardmäßig verarbeitet die Windows-Konsole keine breiten Zeichen. Wahrscheinlich ist die einfachste Möglichkeit, diese Funktionalität zu aktivieren ist _setmode zu nennen:

_setmode(_fileno(stdout), _O_WTEXT); 

Siehe MSDN für die erforderliche umfasst, Anwendungsbeispiele und weitere Modi.

Verwandte Themen