谁能解释为什么通用字符文字(例如“\u00b1”)被编码为 UTF-8 字符字符串?为什么下面会打印加号/减号?
#include <iostream>
#include <cstring>
int main()
{
std::cout << "\u00b1" << std::endl;
return 0;
}
这与我当前的区域设置有关吗?
2.13.2. [...]
5/ 通用字符名被转换为编码,在
指定字符的执行字符集。如果没有
这样的编码,通用字符名称被转换为
实现定义的编码。 [Note:在翻译阶段 1,a
每当实际扩展时都会引入通用字符名
在源文本中遇到字符。因此,所有扩展
字符是根据通用字符名称来描述的。
然而,实际的编译器实现可能使用它自己的本机
字符集,只要得到相同的结果。 ]
and
2.2. [...]执行字符集成员的值
是实现定义的,并且任何其他成员都是
特定于语言环境的。
简而言之,您的问题的答案就在您的编译器文档中。然而:
2.2. 2/ 通用字符名指定的字符
\UNNNNNNNN 是 ISO/IEC 中字符短名称的字符
10646 是 NNNNNNNN;由指定的字符
通用字符名称 \uNNNN 是其字符的字符
ISO/IEC 10646 中的短名称是 0000NNNN。如果十六进制值
通用字符名称小于 0x20 或在 0x7F-0x9F 范围内
(包含),或者如果通用角色名称指定一个角色
在基本源字符集中,则该程序是错误的。
因此,您可以保证您命名的字符被转换为实现定义的编码,可能是特定于语言环境的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)