gpt4 book ai didi

c++ - 在 Visual Studio 2010 中打印版权符号

转载 作者:可可西里 更新时间:2023-11-01 14:13:50 33 4
gpt4 key购买 nike

我一直在努力使用 Visual Studio 在 Windows 中打印版权符号。我知道 0xA9 是版权符号的 ASCII 代码,它适用于非 Windows 平台。但在 Windows 上,我无法使用相同的代码打印版权符号。

#include "iostream.h"
using namespace std;


int main(int argc, char * argv[])
{

cout << (char)0xA9 << " Copyright symbol" << endl;

return 0;
}

Linux/HP-UX 和 AIX 上的输出:© Copyright symbol

Windows 上的输出:⌐ 版权符号

我是 Windows 的新手,有人可以帮助我吗。

最佳答案

作为Basile points out , 版权符号 (©) 不是 ASCII 字符。也就是说,它不是7位ASCII字符集中包含的字符之一。

您需要切换到 Unicode 编码,以便使用像这样超出 7 位 ASCII 范围的“特殊”字符。这在 Windows 中并不困难,只需要您使用宽字符 (wchar_t) 而不是窄字符 (char)。与大多数使用 UTF-8(使用常规 char 数据类型)实现 Unicode 支持的基于 Unix 的系统不同,Windows 没有对 UTF-8 的内置支持。它改用 UTF-16,这要求您使用更大的 wchar_t 类型。

方便的是,C++标准库也支持宽字符串,你只需要使用合适版本的类即可。您想要的那些将在其名称前面附加一个 w。因此,重写您的代码以在 Windows 上使用宽 (Unicode) 字符,它看起来像这样:

#include <iostream>  // (standard C++ headers should be in angle brackets)

int main(int argc, char * argv[])
{
std::wcout << (wchar_t)0xA9 << " Copyright symbol" << std::endl;
return 0;
}

当您在 Windows 上尝试原始代码时得到那个奇怪的 字符的原因是该字符是值 0xA9 在您的默认 Windows 中映射到的字符字符集。你看,char 类型支持 8 位值,但我在上面说过 ASCII 字符集只定义了 7 位字符。这个额外的位在 Windows 上用于定义一些额外的有用字符。

有两组不同的扩展窄(非 Unicode)字符集,一组称为 OEM 字符集,另一组(由于历史原因)称为 ANSI 字符集。通常,命令提示符使用 OEM character set , 它用字符填充大部分上部范围,用于在基于文本的环境中绘制线条、框和其他模拟图形。遗留的非 Unicode Windows 应用程序通常使用 ANSI 字符集,该字符集特定于您的 Windows 本地化版本,并使用以您的语言显示所有字母/符号所需的字符填充上限。

如果这听起来很复杂,那是因为它确实很复杂。这就是为什么每个人都忘记了所有这些东西并在 Windows 上只使用 Unicode。我也向您强烈推荐这条路。 :-)

编辑: 疯了,我忘了它比这更复杂。更改代码以输出宽字符可能还不够。 Windows 命令提示符在各种方面都 损坏 向后兼容,严重阻碍了它对 Unicode 字符的支持。

默认情况下,它使用光栅字体,这些字体甚至可能不为大多数 Unicode 字符提供符号(版权符号很可能是一个异常(exception))。您需要将命令提示符使用的字体更改为其他字体,例如 Lucida Console 或 Consolas,以确保其正常工作。幸运的是,您可以为所有命令提示符窗口设置默认值。不幸的是,这是针对每个用户的设置。

此外,命令提示符仍使用事件代码页,因此我在上面解释的所有内容仍然相关,您不能忘记它。您可以使用 chcp xxxx 命令更改它使用的特定代码页,其中 xxxx 是您希望使用的代码页的编号。不幸的是,这仅适用于当前的控制台 session ,并且每次都必须重置。对于需要输出 Unicode 字符的应用程序来说不是一个好的解决方案。

有关这些问题以及如何在命令提示符下输出 Unicode 字符串的更多信息,请参阅以下问题的答案:

关于c++ - 在 Visual Studio 2010 中打印版权符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15564047/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com