在Visual Studio 2010中打印版权符号

我一直在努力使用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上输出: ⌐ Copyright symbol

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

正如Basile指出的 ,版权符号(©)不是一个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字符集 ,在基于文本的环境中填充大部分较高范围的字符,用于绘制线条,框和其他模拟图形。 传统的,非Unicode的Windows应用程序通常使用ANSI字符集,这是特定于Windows的本地化版本,并填充上部范围所需字符以显示您的语言中的所有字母/符号。

如果听起来很复杂,那是因为它。 这就是为什么大家都忘记了所有这些东西,并在Windows上使用唯一的Unicode。 我强烈建议你的路径。 🙂

编辑:坚果,我忘了它比这更复杂。 改变你的代码来输出宽字符可能是不够的。 Windows命令提示符以各种方式向后兼容,严重削弱了对Unicode字符的支持。

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

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

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

  • cmd.exe使用什么编码/代码页?
  • 可以命令提示符显示unicode字符?

请注意, 0xa9不是ASCII (有7位字符,限制在0 - 0x7f范围内)。 它可以是ISO / IEC 8859-1 。 现在许多现在的系统(包括大多数Linux终端)现在都使用UTF-8 ,版权字形是由两个字节编码的,所以你可以在C或C ++中编码"\302\251""\xc2\xa9"资源。 因此,您的程序不会在使用UTF-8的Linux xfce4-terminal显示版权标记。

一些Windows机器有不同的编码系统。

如果可能的话,我会设置你的系统(不管是Linux还是Windows)来使用UTF8 字符编码 (或使用UTF16宽字符)。

一个ASCII的传统版权是非常普遍的(C)正是因为ASCII编码没有版权标志。

你可以使用alt + 0169。 原谅我,如果我错了。