2016-07-24 10 views
0

Ich bin ein Anfänger Programmierer und arbeite an einem einfachen Spiel. Ich möchte Ausgabe Unicode Symbole wie Alt + █ an die Konsole. Ich verwende CodeBlocks unter Windows 10 und verwende den GNU GCC-Compiler. Hier ist, was ich versuche zu tun:Unicode wird nicht korrekt ausgegeben (Windows 10)

#include <iostream> 

using namespace std; 

int main() 
{ 
    cout << "\u2588"; 
    return 0; 
} 

Was ich auf der Konsole ein paar seltsamen Symbole ist. Dies geschieht sogar mit anderen Unicode-Zeichen, aber die Symbole sind unterschiedlich.

Ich versuchte mit wcout, aber dann bekomme ich nur einen leeren Platz statt.

Ich habe auch versucht, Dinge wie diese:

_setmode(_fileno(stdout), _O_U16TEXT); 

Aber dann bekomme ich Fehler, die _fileno und _O_U16TEXT wurde nicht erklärt, obwohl ich die Bibliotheken eingeführt, die dafür notwendig zu sein scheinen:

#include <iostream> 
#include <io.h> 
#include <fcntl.h> 
#include <fstream> 

Die Unicode-Symbole sind nicht unbedingt notwendig für mein Spiel, aber ich will nur, dass es schöner aussieht.

+1

Nicht ein Duplikat, aber lesen Sie http://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how –

+1

Mögliche Duplikate von [Ausgabe Unicode-Zeichenfolgen in der Windows-Konsolen-App] (http://stackoverflow.com/questions/2492077/output-unicode-strings-in-windows-console-app) – roeland

Antwort

0

Die Windows-Eingabeaufforderung verwendet CP850 standardmäßig als Codierung und kann dieses Symbol oder jedes Unicode-Symbol für diese Angelegenheit nicht korrekt anzeigen unless you change it.

Es hat jedoch seine eigene Version davon, \xDB das ist wahrscheinlich, was Sie suchen.

Für andere Symbole, die Sie in der Windows-Eingabeaufforderung, öffnen charmap.exe und überprüfen Sie die Schrift Terminal, gibt es eine Reihe von nützlichen Symbole verwenden können, die mit CP850 und Anzeige unter der Eingabeaufforderung die gleiche Art, wie sie präsentiert werden dort kompatibel sein sollte.

+0

Die Windows-Eingabeaufforderung verwendet standardmäßig eine ANSI-Codierung, die je nach Windows-Lokalisierung variiert. CP850 ist ein westeuropäischer Standard. Es ist CP437 in den USA.Der Befehl 'chcp' zeigt die aktuelle Codepage an. –

+0

Vielen Dank, es funktioniert total –

+0

Und noch etwas: Wie kann ich den Code kennen, den ich benutzen muss? Die Charmap zeigt immer noch den Code von Full Block █ als U + 2588, obwohl ich '\ xDB' brauche, damit das funktioniert –

0

Das ist, weil Sie versuchen, wchar_t (16 Bits lang) Zeichen mit std::cout zu drucken, die nur char (8 Bit lang) unterstützt. Verwenden Sie std::wcout anstelle von std::cout, wcout ist für breite Zeichen gedacht.

+0

Ich versuchte dies mit WCout, aber nichts wird ausgegeben, es sei denn ich gehe zu \ u256 oder niedriger. Wenn ich \ u257 oder höher versuche, gibt es entweder nichts oder mehrere Symbole aus. –

0

In anderen Antworten wurde die Zeichenfolge als UTF-16-Literal behandelt. Sie können auch den Compiler sagen, es als utf-8-Literal zu behandeln (zwingt sie alle Zeichen innerhalb als utf-8 zu kodieren), indem sie es mit u8 prefixing:

#include <iostream> 

using namespace std; 

int main() 
{ 
    cout << u8"\u2588"; 
    return 0; 
} 

Beachten Sie, dass Windows-Konsolen sind nicht durch Die Standardeinstellung ist so eingestellt, dass die Ausgabe als utf-8 behandelt wird. Daher wird sie auch ohne einige zusätzliche Einstellungen nicht korrekt angezeigt.

Verwandte Themen