繁体   English   中英

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

[英]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改变输出格式;
  • 并在控制台中设置 unicode 字体(如 Lucida Console Unicode)。

你也可以尝试使用_setmode(_fileno(stdout), _O_U16TEXT); ,这需要fcntl.hio.h (如本答案所述,并记录在本博客文章中)。

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

  1. 使用cmd /u启动命令窗口。 /u表示您的程序将输出 Unicode。
  2. 使用chcp 65001指示您要使用 UTF-8 而不是代码页之一。
  3. 选择具有更多字形覆盖的字体。 较新版本的 Windows 中的命令窗口提供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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM