- 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/
我想根据我使用的 visual studio 版本编译不同的东西,比如 #if VISUAL_STUDIO_VERSION > 2015 eventH?.Invoke(this, EventArgs.
在 Visual Studio 2010 中调试并将鼠标悬停在变量名称上时,我可以选择使用 3 种不同的内置可视化工具:文本、XML 和 HTML。 这是我所指的示例: 由于我越来越多地使用基于 JS
我将可视化编程语言理解为允许程序员在屏幕上操作图形(而不是文本)对象以构建功能的语言。 我在 C#、VB 等中看到的最接近的东西是 RAD 控件,但这只是组成 UI 和最简单的功能——甚至与语言本身无
我目前正在使用 Visual Studio 2015 来编程 ASP.NET Core 应用程序。我对安装 Visual Studio 2017 有以下疑问: 什么被认为是最佳实践和/或最干净的方法?
尝试从扩展和更新获取 Visual Studio 扩展时,出现以下错误:- 向 visualstudiogallery.msdn.microsoft.com/Services/VStudio/Exte
我已经开发了Windows服务,并且该服务正在我的帐户下在本地计算机上运行。当我尝试通过在Visual Studio 2008中将其作为一个过程附加该服务来调试该服务时,我得到“无法附加到该过程。 V
作为标准安装的一部分,Visual Studio Code 带有一个名为“Monokai Dimmed”的颜色主题。 有没有办法将它移植到 Visual Studio 2015?我检查了社区主题( h
Visual Studio Community Edition是否可以使用Visual Studio Online帐户上的存储库? 我一直为包含在Online帐户中的Visual Studio Onl
我正在使用文本可视化工具在 Visual Studio 中调试字符串变量。然而,似乎字符串中间的大部分不见了。这背后的原因是什么? 最佳答案 Visual Studio 中的 Text Visuali
我正在开始一个涉及使用多个 SDK 的新项目,包括: 英特尔凌动开发者 SDK 文本转语音 SDK(建议?) 某种网络摄像头和增强现实支持(建议?) 我目前有 2008,但我也可以安装 2010。是否
我想知道,如果我发送一个解决方案文件夹(它是用 visual studio C# 编写的),您可以在 visual studio for mac 中打开解决方案吗? 在visual studio 20
有没有办法在 Visual Studio Code 和 Visual Studio 中设置相同的快捷方式(而不必每次都手动更改它们)? 例如,我在 Visual Studio Code 中经常使用 A
我无法启用 实时可视化树 在 Visual Studio 2017 用于 UWP 应用程序 (C#)。这个工具在 VS2015 上工作,但在 VS2017 中从来没有为我工作过。它对我的 WPF 项目
我刚开始了解 Visual Studio Code。我想知道,我可以将 Visual Studio 替换为所有 .NET 开发相关的工作吗? 我可以节省 Visual Studio 许可的成本吗? V
我安装了具有有效许可证(Visual Studio 订阅)的 Visual Studio 2019 企业版(VS 2019 16.1.4),它运行良好。 突然之间,当我尝试打开项目或项目中的任何文件时
Visual Studio 2015 Pro 提供以下 错误 : error BC36716: Visual Basic 9.0 does not support implicit line cont
我正在我的 PC 中使用 .net Framework 2.0 和 Visual C#(Microsoft Visual Studio 2008)开发 Windows 应用程序。 完成我的项目后,我必
有什么方法可以在启动 VS 时禁用 VA X 并仅在需要时将其重新打开?因为它会导致一些滞后。我似乎在 VS 的选项或 VA 的选项中都找不到该选项。 最佳答案 持shift在 Visual Stud
我可以将 Visual Studio 命令提示符 与免费的 Visual C# Express 一起使用吗? Visual Studio 命令提示符 被引用 here : Run 'Visual St
这很容易成为 Visual Studio 历史上最烦人的“功能”之一,我不明白它为什么存在 -- 曾经 . 为什么 CodePlex 项目需要关心我使用的是什么版本的 Visual Studio? 在
我是一名优秀的程序员,十分优秀!