在 Windows 中使用 C++ 将 Unicode 输出到控制台
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2849010/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Output Unicode to console Using C++, in Windows
提问by Jesse Foley
I'm still learning C++, so bear with me and my sloppy code. The compiler I use is Dev C++. I want to be able to output Unicode characters to the Console using cout. Whenver i try things like:
我还在学习 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;
}
It outputs strange characters to the console, like μA■Gg. Why does it do that, and how can I get to to display ?????? Or is this not possible with Windows?
它向控制台输出奇怪的字符,例如 μA■Gg。为什么会这样,我如何才能显示??????或者这在 Windows 上是不可能的?
回答by Tyn
What about std::wcout
?
怎么样std::wcout
?
#include <iostream>
int main() {
std::wcout << L"Hello World!" << std::endl;
return 0;
}
This is the standard wide-characters output stream.
这是标准的宽字符输出流。
Still, as Adrian pointed out, this doesn't address the fact cmd
, by default, doesn't handle Unicode outputs. This can be addressed by manually configuring the console, like described in Adrian's answer:
尽管如此,正如 Adrian 指出的那样,这并没有解决cmd
默认情况下不处理 Unicode 输出的事实。这可以通过手动配置控制台来解决,如 Adrian 的回答中所述:
- Starting
cmd
with the/u
argument; - Calling
chcp 65001
to change the output format; - And setting a unicode font in the console (like Lucida Console Unicode).
- 启动
cmd
与/u
论证; - 调用
chcp 65001
改变输出格式; - 并在控制台中设置 unicode 字体(如 Lucida Console Unicode)。
You can also try to use _setmode(_fileno(stdout), _O_U16TEXT);
, which require fcntl.h
and io.h
(as described in this answer, and documented in this blog post).
您还可以尝试使用_setmode(_fileno(stdout), _O_U16TEXT);
, 需要fcntl.h
和io.h
(如本答案所述,并记录在本博客文章中)。
回答by Adrian McCarthy
I'm not sure Windows XP will fully support what you need. There are three things you have to do to enable Unicode with a command console:
我不确定 Windows XP 是否会完全支持您所需要的。要使用命令控制台启用 Unicode,您必须做三件事:
- Start the command window with
cmd /u
. The/u
says your programs will output Unicode. - Use
chcp 65001
to indicate you want to use UTF-8 instead of one of the code pages. - Select a font with more glyph coverage. The command windows in newer versions of Windows offer
Lucida Console Unicode
. My XP box has a subset of that calledLucida Console
. It doesn't have a very extensive reperttheitroade, but it should be sufficient if you're just trying to display some accented characters.
- 用 启动命令窗口
cmd /u
。该/u
说你的程序将输出的Unicode。 - 使用
chcp 65001
指示要使用UTF-8,而不是代码页中的一个。 - 选择具有更多字形覆盖的字体。较新版本的 Windows 中的命令窗口提供
Lucida Console Unicode
. 我的 XP 盒子有一个叫做Lucida Console
. 它没有非常广泛的曲目,但如果您只是想显示一些重音字符,它应该足够了。
回答by Puppy
You used the ANSI output stream. You need to use std::wcout << L"Blah blah blah some gibberish unicode: ?????\n";
您使用了 ANSI 输出流。你需要使用std::wcout << L"Blah blah blah some gibberish unicode: ?????\n";
Also, use std::cin.get(), not system("PAUSE")
另外,使用 std::cin.get(),而不是 system("PAUSE")
回答by quanta
In Linux, I can naively do:
在 Linux 中,我可以天真地做:
std::cout << "? , Α, Β, Γ, Δ, ,Θ , Λ, Ξ, ... ±, ... etc";
and it worked for most of the characters I tried.
它适用于我尝试过的大多数角色。