[英]Output Unicode to console Using C++, in Windows
我还在学习 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;
}
这是标准的宽字符输出流。
尽管如此,正如阿德里安指出的那样,这并没有解决cmd
的事实,默认情况下,不处理 Unicode 输出。 这可以通过手动配置控制台来解决,如 Adrian 的回答中所述:
/u
参数启动cmd
;chcp 65001
改变输出格式; 你也可以尝试使用_setmode(_fileno(stdout), _O_U16TEXT);
,这需要fcntl.h
和io.h
(如本答案所述,并记录在本博客文章中)。
我不确定 Windows XP 是否会完全支持您所需要的。 要使用命令控制台启用 Unicode,您必须做三件事:
cmd /u
启动命令窗口。 /u
表示您的程序将输出 Unicode。chcp 65001
指示您要使用 UTF-8 而不是代码页之一。Lucida Console Unicode
。 我的 XP 盒子有一个叫做Lucida Console
的子集。 它没有非常广泛的曲目,但如果您只是想显示一些重音字符,它应该足够了。您可以使用开源 {fmt} 库来便携地打印 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} 的作者。
您使用了 ANSI 输出流。 你需要使用
std::wcout << L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";
另外,使用std::cin.get()
,而不是system("PAUSE")
在 Linux 中,我可以天真地做:
std::cout << "ΐ , Α, Β, Γ, Δ, ,Θ , Λ, Ξ, ... ±, ... etc";
它适用于我尝试过的大多数角色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.