命令提示符能显示Unicode字符吗?

3

例如:

cout << "你好" << endl;

1
如果你在自己的机器上尝试并且成功了,那又能说明什么呢?这是否意味着它也能在客户的机器上运行良好呢?@Falmarri - sbi
5个回答

3

这取决于平台和命令提示符的编码。

话虽如此,您可能会在以下情况下更加顺利:

std::wcout << L"你好" << std::endl;

取决于编译器和相关用法。Visual C++的运行时库会进行很多操作,检测输出是否进入控制台窗口并调整其行为。这往往会误导程序员对控制台窗口的实际作用以及宽字符流的功能有所误解。 - Cheers and hth. - Alf

2

如果您在谈论Windows,那么您就在谈论控制台窗口。

Windows控制台窗口是基于Unicode的,更具体地说是UCS-2(基本多语言平面,本质上是原始的16位Unicode)。

与其他答案中所建议的相反,您不能通过std::wcout比使用std::cout获得更多输出结果。标准的宽输出流只是将其翻译为程序的单字节执行字符编码。在Windows中,默认情况下是OEM字符编码(可以通过未记录的注册表键进行配置)。

但是,您可以通过Windows API的控制台函数输出Unicode。

注意:将控制台窗口设置为UTF-8并不是一个好主意。然后,[cmd.exe]命令解释器会默默地忽略大多数命令。至少在Windows XP及更早版本中是如此。

我只是将OEM设置为Windows ANSI Western(通过提到的未记录的注册表键),这对于大多数目的都有效,但当然不适用于中文。它的代码页是1252。或者,您可以通过每个命令解释器实例中的命令chcp 1252以及其他方式手动执行此操作。

祝您好运。


1

这取决于操作系统和实现方式。目前活跃的C++标准甚至没有提到Unicode。

在Windows上,我相信您可以使用宽字符版本。然后您的代码需要是:

std::wcout << L"ni3 hao3" << std::endl;

然而,您可能需要特别输入Unicode字符代码,因为您用于编写C++源代码的代码集可能不是Unicode。


1

这完全取决于您使用的控制台/ shell。

有些shell可以配置为使用UTF-8(我很久以前做过一次),因此可以实现,但是我忘记了详细信息。

在任何人能够更具体之前,我们需要知道您正在使用的shell以及shell运行的平台(每个版本的完整详细信息)。


1

Windows控制台支持Unicode,但只是部分支持。例如,它不支持从右到左的语言。

您使用cout的示例未输出Unicode。请改用wcout。或者使用WriteConsoleW


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接