我还在学习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无法实现这一点?
答案 0 :(得分:14)
std::wcout
怎么样?
#include <iostream>
int main() {
std::wcout << L"Hello World!" << std::endl;
return 0;
}
这是标准的宽字符输出流。
正如Adrian指出的那样,这并没有解决事实cmd
,默认情况下不处理Unicode输出。这可以通过手动配置控制台来解决,如Adrian的答案所述:
cmd
参数启动/u
; chcp 65001
更改输出格式; 您还可以尝试使用_setmode(_fileno(stdout), _O_U16TEXT);
,这需要fcntl.h
和io.h
(如this answer中所述,并记录在this blog post中)。
答案 1 :(得分:6)
我不确定Windows XP是否会完全支持您的需求。使用命令控制台启用Unicode需要做三件事:
cmd /u
启动命令窗口。 /u
表示您的程序将输出Unicode。chcp 65001
表示您要使用UTF-8而不是其中一个代码页。Lucida Console Unicode
。我的XP框中有一个名为Lucida Console
的子集。它没有非常广泛的曲目,但如果你只是试图显示一些重音字符就足够了。答案 2 :(得分:6)
您可以使用 the open-source {fmt} library 可移植地打印 Unicode 文本,包括在 Windows 上,例如:
#include <fmt/core.h>
int main() {
fmt::print("Blah blah blah some gibberish unicode: ĐĄßĞĝ\n");
}
输出:
Blah blah blah some gibberish unicode: ĐĄßĞĝ
这需要使用 MSVC 中的 /utf-8
编译器选项进行编译。
我不建议使用 wcout
,因为它不可移植,例如:
std::wcout << L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";
将在 macOS 或 Linux (https://godbolt.org/z/z81jbb) 上错误地打印 ĐĄßĞĝ
部分:
Blah blah blah some gibberish unicode: ??ss??
并且在不更改代码页的情况下甚至无法在 Windows 上运行:
Blah blah blah some gibberish unicode:
免责声明:我是 {fmt} 的作者。
答案 3 :(得分:1)
您使用了ANSI输出流。您需要使用
std::wcout << L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";
另外,使用std :: cin.get(),而不是system(“PAUSE”)
答案 4 :(得分:-3)
在Linux中,我可以天真地做:
std::cout << "ΐ , Α, Β, Γ, Δ, ,Θ , Λ, Ξ, ... ±, ... etc";
它适用于我尝试的大多数角色。