将Unicode输出到控制台在Windows中使用C ++

我还在学习C ++,所以请忍受我和我的草率代码。 我使用的编译器是Dev C ++。 我希望能够使用cout将Unicode字符输出到控制台。 当我尝试像下面这样的事情时:

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

它输出奇怪的字符到控制台,如μA■Gg。 为什么这样做,我怎样才能显示ĐĄßĞĝ? 或者,这是不可能的Windows?

什么关于std::wcout

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

这是标准的宽字符输出stream。

不过,正如Adrian指出的那样,这并没有解决cmd ,默认情况下,它不处理Unicode输出。 这可以通过手动configuration控制台来解决,就像Adrian的回答中所描述的那样:

  • /u参数启动cmd ;
  • 调用chcp 65001来改变输出格式;
  • 并在控制台中设置一个Unicode字体(如Lucida Console Unicode)。

你也可以尝试使用_setmode(_fileno(stdout), _O_U16TEXT); ,这需要fcntl.hio.h (正如在这个答案中所描述的,并且在这个博客文章中有logging )。

我不确定Windows XP会完全支持你所需要的。 要使用命令控制台启用Unicode,您需要做三件事:

  1. cmd /u启动命令窗口。 /u表示你的程序将输出Unicode。
  2. 使用chcp 65001来表明你想使用UTF-8而不是其中的一个代码页。
  3. select字形覆盖范围更大的字体。 新版Windows中的命令窗口提供了Lucida Console Unicode 。 我的XP盒子有一个名为Lucida Console的子集。 它没有一个非常广泛的曲目,但它应该是足够的,如果你只是想显示一些重音字符。

您使用了ANSI输出stream。 你需要使用
std::wcout << L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";

另外,使用std :: cin.get(),而不是系统(“PAUSE”)

在Linux中,我可以天真地做到:

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

而且它对我尝试过的大多数angular色都有效。