【问题标题】:How can I display unicode characters in a linux terminal using C++?如何使用 C++ 在 linux 终端中显示 unicode 字符?
【发布时间】:2010-12-20 10:07:09
【问题描述】:

我正在 Linux 环境中使用 C++ 开发国际象棋游戏,我想在 bash 终端中使用 unicode 字符显示棋子。有没有办法使用 cout 显示符号?

输出马的例子很好:♞ = U+265E。

【问题讨论】:

  • 请记住,即使您为 UTF-8/16 发送正确的字节,也不能保证用户的 tty 支持 unicode,或者即使支持,也不能保证它的字体具有里面有这些字符。
  • 我的问题是如何发送正确的字节 :) 我的终端支持 unicode 字符,现在我真的不在乎它在另一个环境中是否会正常。

标签: c++ unicode terminal


【解决方案1】:

抱歉,起初误解了您的问题。这段代码在终端打印一个白色的国王(用 KDE Konsole 测试过)

#include <iostream>

int main(int argc, char* argv[])
{
std::cout <<"\xe2\x99\x94"<<std::endl;
return 0;
}

通常通过语言环境指定编码。尝试设置环境变量。

为了告诉应用程序使用 UTF-8 编码,并假设美国 英语是您的首选语言, 您可以使用以下命令:

export LC_ALL=en_US.UTF-8

您使用的是“裸”终端还是在 X-Server 下运行的东西?

【讨论】:

  • 我在 Ubuntu 8.04 上使用 bash 终端,它绝对支持 unicode 符号。
  • 对不起,一开始误解了你的问题。更改了我的答案以反映它。
  • 谢谢..这是另一种解决方案,但我只能接受一个答案!
【解决方案2】:

要输出 Unicode 字符,您只需使用输出流,就像输出 ASCII 字符一样。您可以将 Unicode 代码点存储为多字符串:

 std::string str = "\u265E";
 std::cout << str << std::endl;

如果您想输出一个码点高于 ASCII 范围的单个 Unicode 字符,使用宽字符输出也可能很方便:

 setlocale(LC_ALL, "en_US.UTF-8");
 wchar_t codepoint = 0x265E;
 std::wcout << codepoint << std::endl;

但是,正如其他人所指出的,这是否正确显示取决于用户环境中的很多因素,例如用户的终端是否支持Unicode显示,用户是否安装了正确的字体等. 对于大多数开箱即用的主流发行版(如安装了 Gnome 的 Ubuntu/Debian)来说,这应该不是问题,但不要指望它可以在任何地方工作。

【讨论】:

  • 在 gnome 中转到编辑-> 配置文件首选项,然后在常规选项卡下确保您使用的字体支持特殊字符。 Monospace 可能不起作用,但是像 DejaVu Sans Mono 或 Droid Sans Mono 这样的字体可以。
  • 注意:对我来说,我只需要setlocale(LC_ALL, "en_US.UTF-8"); 然后,我甚至可以使用原始的wchar_t 字符。
猜你喜欢
  • 2019-09-21
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2023-03-22
相关资源
最近更新 更多