将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.h
和io.h
(正如在这个答案中所描述的,并且在这个博客文章中有logging )。
我不确定Windows XP会完全支持你所需要的。 要使用命令控制台启用Unicode,您需要做三件事:
- 用
cmd /u
启动命令窗口。/u
表示你的程序将输出Unicode。 - 使用
chcp 65001
来表明你想使用UTF-8而不是其中的一个代码页。 - 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色都有效。