- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我一直在努力使用 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/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我开发了一个 iOS 应用程序,我们可以在其中将表情符号从 iOS 发送到门户网站,反之亦然。从 iOS 发送到门户网站的所有表情符号都显示完美,除了“©和®”。 这是表情符号编码的一段代码。 NSD
我是 R 的新手。能够使用 R 控制台安装一个名为 KernSmooth 的包。有什么地方可以找出 KernSmooth 的版权信息吗?下面是我所做的。 > install.packages("Ker
在 XAML 文件中放置版权声明是否有标准?在 .cs 文件中,我使用以下内容: //---------------------------------------------------------
有人知道为什么 © 和 ® 不能像 ™ 和 ℠ 那样在不影响前导(即 line-height )的情况下很好地上标吗? 我试过用 包裹 © 和 ®甚至但我无法让它按照我需要的方式工作。有时更改字体大
我想将我们公司的版权信息添加到我们所有现有的源代码文件中。 该项目是在Eclipse 中开发的。因此,对于新文件,我可以按照建议修改设置 here .但是对于现有文件,我应该怎么做。我如何修改数百个j
我正在尝试清理数据库输入并发现 Ⓡ 字符有问题。 Ⓡ 转换为 Ⓡ 即使在变量周围使用 html_entity_decode。 这是一个问题,因为该字段在数据库中只允许 4 个字符。 ® 实
我可以将 Alt 键与数字键盘结合使用来键入符号,但如何以编程方式将符号(英镑、欧元、版权)插入文本框? 我有一个配置屏幕,所以我需要动态创建\uXXXX。 最佳答案 在 C# 中,Unicode 字
每个 Delphi 的 VCL 源文件都有这样的标题: {*******************************************************} {
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我在对特殊字符进行 JSON 编码时遇到问题。这些字符在我的电脑、记事本、浏览器甚至我的数据库中都能正常显示。但是,它们不进行 JSON 编码。示例如下: site.com 之后的版权符号使 JSO
我目前正在将应用程序从 GMaps V2 迁移到 V3。由于我使用 OSM 和其他非 Google map 图层,因此我希望将版权声明保留在右下角。但是reference documentation对
我在工作中需要使用 Google map API v3,而他们给我的设计没有谷歌放在 map 下部的 Logo /页脚/版权。好吧,我需要禁用或隐藏它,因为我被告知无论如何我都需要匹配确切的设计。 我
我是一名优秀的程序员,十分优秀!