Character sets and encodings
本页面描述了C++标准规定的若干字符集。
翻译字符集翻译字符集 由以下元素组成:
翻译字符集是基础字符集和基础字面量字符集(见下文)的超集。 |
(自 C++23 起) |
基本字符集
基本字符集 由以下 96 (C++26前) 99 (C++26起) 个字符组成:
| 码点 | 字符 | 字形 |
|---|---|---|
| U+0009 | 字符制表符 | |
| U+000B | 行制表符 | |
| U+000C | 换页符 (FF) | |
| U+0020 | 空格 | |
| U+000A | 换行符 (LF) | new-line |
| U+0021 | 感叹号 |
!
|
| U+0022 | 引号 |
"
|
| U+0023 | 数字符号 |
#
|
| U+0025 | 百分号 |
%
|
| U+0026 | 与符号 |
&
|
| U+0027 | 撇号 |
'
|
| U+0028 | 左圆括号 |
(
|
| U+0029 | 右圆括号 |
)
|
| U+002A | 星号 |
*
|
| U+002B | 加号 |
+
|
| U+002C | 逗号 |
,
|
| U+002D | 连字符减号 |
-
|
| U+002E | 句点 |
.
|
| U+002F | 斜线 |
/
|
| U+0030 .. U+0039 | 数字零 .. 九 |
0 1 2 3 4 5 6 7 8 9
|
| U+003A | 冒号 |
:
|
| U+003B | 分号 |
;
|
| U+003C | 小于号 |
<
|
| U+003D | 等号 |
=
|
| U+003E | 大于号 |
>
|
| U+003F | 问号 |
?
|
| U+0041 .. U+005A | 拉丁大写字母 A .. Z |
A B C D E F G H I J K L M
|
| U+005B | 左方括号 |
[
|
| U+005C | 反斜线 |
\
|
| U+005D | 右方括号 |
]
|
| U+005E | 抑扬符 |
^
|
| U+005F | 下划线 |
_
|
| U+0061 .. U+007A | 拉丁小写字母 a .. z |
a b c d e f g h i j k l m
|
| U+007B | 左花括号 |
{
|
| U+007C | 竖线 |
|
|
| U+007D | 右花括号 |
}
|
| U+007E | 波浪号 |
~
|
|
以下字符自 C++26 起被添加到基础字符集:
|
(since C++26) |
基本字面量字符集
基本字面字符集 由基本字符集中的所有字符以及以下控制字符组成:
| 码点 | 字符 |
|---|---|
| U+0000 | 空字符 |
| U+0007 | 响铃符 |
| U+0008 | 退格符 |
| U+000D | 回车符(CR) |
执行字符集
执行字符集和执行宽字符集是基本字面字符集的超集。执行字符集的编码以及附加元素集合(如有)是区域设置特定的。执行宽字符集的每个元素必须能够表示为独立的 wchar_t 代码单元。
代码单元与字面值编码
一个 代码单元 是字符类型的整数值。 字符字面量 中除多字符或不可编码字符字面量之外的字符,或在 字符串字面量 中的字符,会被编码为一个或多个代码单元的序列,具体由编码前缀决定;这被称为相应的 字面量编码 。
字面量编码或某个执行字符集的本地化特定编码,会将基本字面量字符集的每个元素编码为具有非负值的单个代码单元,且该代码单元的值不同于其他任何此类元素的代码单元。基本字面量字符集之外的字符可通过多个代码单元进行编码;此类代码单元的值可能与基本字面量字符集元素的代码单元值相同。执行字符集的编码可能与任何字面量编码无关。
普通字面值编码是应用于普通字符或字符串字面值的编码。宽字面值编码是应用于宽字符或字符串字面值的编码。
U+0000 NULL字符被编码为值0。翻译字符集的其他元素均不以值为0的代码单元进行编码。数字0(U+0030)之后的每个十进制数字字符的代码单元值应比前一个数字的值大1。普通和宽字符字面值的编码在其他方面由实现定义。
对于 UTF-8、UTF-16 或 UTF-32 字面量,翻译字符集中每个字符对应的 UCS 标量值按照 ISO/IEC 10646 标准中相应 UCS 编码形式的规定进行编码。
注释
C++23 通过 P2314R4 修改了部分字符集的标准名称。
| 新名称 | 旧名称 |
|---|---|
| basic character set | basic source character set |
| basic literal character set |
basic execution character set
basic execution wide-character set |
从源文件 (UTF-8源文件除外) (C++23 起) 字符到 基础字符集 (C++23 前) 翻译字符集 (C++23 起) 的映射在 翻译阶段 1 期间由实现定义,因此要求实现文档说明基础源字符在源文件中的表示方式。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| CWG 788 | C++98 |
执行字符集成员的值由实现定义,
但不具有本地化特性 |
具有本地化特性 |
| CWG 1796 | C++98 |
基础执行(宽)字符集中空(宽)字符的
表示形式所有位均为零 |
仅要求值为零 |
参见
| ASCII 码表 | |
|
C 文档
关于
字符集与编码
|