在 Visual Studio 2010 中打印版权符号

Posted

技术标签:

【中文标题】在 Visual Studio 2010 中打印版权符号【英文标题】:Printing Copyright Symbol in Visual Studio 2010 【发布时间】:2013-03-22 06:25:38 【问题描述】:

我一直在努力使用 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 新手,谁能帮帮我。

【问题讨论】:

查看***.com/questions/2492077/… char CopyrightChar = '\xa9'; cout utf8everwhere.org 相关 【参考方案1】:

作为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 命令提示符在各种方面都broken向后兼容,严重阻碍了它对 Unicode 字符的支持。

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

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

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

What encoding/code page is cmd.exe using? Can command prompt display unicode characters?

【讨论】:

@Aniket 是的,从原始代码中复制了它。我刚刚修好了。 @CodyGray 非常感谢您的解释。我仍然无法看到您建议的更改的版权符号。我在设置下尝试了“使用 Unicode 字符集”和“多字节字符集”。还使用了可以打印版权符号的字体:( 非常感谢@CodyGray,感谢您的宝贵时间和帮助!【参考方案2】:

注意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 character encoding(或使用 UTF16 宽字符)。阅读UTF-8 everywhere。

ASCII 传统的版权调用非常普遍 (C) 正是因为 ASCII 编码没有任何版权字形。

【讨论】:

内置的 Windows 命令提示符不支持 UTF-8。但是,它确实支持 Unicode,但实现是 UTF-16,并且需要您使用宽字符。 @Alexey 如果我没记错的话,那是一个伪代码页,使用时会出现各种兼容性问题。也许这是我不知道的命令提示符特有的东西。当然,没有办法让操作系统本身或非 Unicode 程序使用 UTF-8 代码页。 看起来你是对的,我有点搞混了。 UTF-8 (65001) is supported as an NT code page,你只是 can't set the system to use it as an ANSI code page(这就是非 Unicode 应用程序无法使用它的原因)。你知道的越多,事情就越复杂。【参考方案3】:

取自here:

#if defined(WIN32)

#include <windows.h>

#endif

#include <stdio.h>

void print_copyright_hint() 
    printf("Copyright ");

#if defined(WIN32)
    auto copyright = const_cast<wchar_t *>(L"©");
    auto handle = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteConsoleW(handle, copyright, static_cast<DWORD>(wcslen(copyright)), nullptr, nullptr);
#else
    printf("©");
#endif
    printf(" my Company");

【讨论】:

【参考方案4】:

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

【讨论】:

不,这确实提供了问题的答案。

以上是关于在 Visual Studio 2010 中打印版权符号的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 速成版的 Javascript 插件

谁有microsoft visual studio 2010 旗舰版的产品密钥 急需!

Microsoft Visual Studio 2010旗舰版怎么破解

visual studio 2010 简体中文版编程软件怎么安装

求破解版Visual Studio2010,最好百度云

Visual Studio 2010 Express 中的 LESS 支持