Salida Unicode a consola Usando C ++, en Windows

Todavía estoy aprendiendo C ++, así que tengan paciencia conmigo y con mi código descuidado. El comstackdor que uso es Dev C ++. Quiero poder mostrar caracteres Unicode en la consola usando cout. Cuando bash cosas como:

#include  int main() { std::cout << "Hello World!\n"; std::cout << "Blah blah blah some gibberish unicode: ĐĄßĞĝ\n"; system("PAUSE"); return 0; } 

Emite caracteres extraños a la consola, como μA ■ Gg. ¿Por qué lo hace, y cómo puedo llegar a mostrar ĐĄßĞĝ? ¿O esto no es posible con Windows?

¿Qué pasa con std::wcout ?

 #include  int main() { std::wcout < < L"Hello World!" << std::endl; return 0; } 

Esta es la secuencia de salida estándar de caracteres anchos.

Aún así, como advirtió Adrian, esto no aborda el hecho de que cmd , por defecto, no maneja las salidas Unicode. Esto se puede solucionar configurando manualmente la consola, como se describe en la respuesta de Adrian:

  • Iniciando cmd con el argumento /u ;
  • Llamar a chcp 65001 para cambiar el formato de salida;
  • Y configurar una fuente Unicode en la consola (como Lucida Console Unicode).

También puede intentar usar _setmode(_fileno(stdout), _O_U16TEXT); , que requieren fcntl.h y io.h (como se describe en esta respuesta y documentado en esta publicación de blog ).

No estoy seguro de que Windows XP sea totalmente compatible con lo que necesita. Hay tres cosas que debe hacer para habilitar Unicode con una consola de comandos:

  1. Inicie la ventana de comandos con cmd /u . El /u dice que sus progtwigs generarán Unicode.
  2. Use chcp 65001 para indicar que desea usar UTF-8 en lugar de una de las páginas de códigos.
  3. Seleccione una fuente con más cobertura de glifos. Las ventanas de comando en las versiones más nuevas de Windows ofrecen Lucida Console Unicode . Mi cuadro XP tiene un subconjunto de eso llamado Lucida Console . No tiene un repertorio muy extenso, pero debería ser suficiente si solo está tratando de mostrar algunos caracteres acentuados.

Usaste el flujo de salida ANSI. Tienes que usar
std::wcout < < L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";

Además, use std :: cin.get (), no system ("PAUSE")

En Linux, puedo ingenuamente hacer:

 std::cout < < "ΐ , Α, Β, Γ, Δ, ,Θ , Λ, Ξ, ... ±, ... etc"; 

y funcionó para la mayoría de los personajes que probé.