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 | Null |
| U+0007 | Bell |
| U+0008 | Backspace |
| U+000D | Возврат каретки (CR) |
Исполняемый набор символов
Набор символов выполнения и расширенный набор символов выполнения являются надмножествами базового набора символов литералов. Кодировки наборов символов выполнения и наборы дополнительных элементов (если таковые имеются) зависят от локали. Каждый элемент расширенного набора символов выполнения должен быть представим в виде отдельной wchar_t кодовой единицы.
Кодовая единица и кодирование литералов
Кодовая единица — это целочисленное значение символьного типа. Символы в символьном литерале , кроме многобайтового или не кодируемого символьного литерала, или в строковом литерале кодируются как последовательность из одной или нескольких кодовых единиц, определяемая префиксом кодировки; это называется соответствующим литеральным кодированием .
Литеральная кодировка или локально-специфичная кодировка одного из исполнительных наборов символов кодирует каждый элемент базового набора литеральных символов как отдельную кодовую единицу с неотрицательным значением, отличную от кодовой единицы для любого другого такого элемента. Символ, не входящий в базовый набор литеральных символов, может быть закодирован более чем одной кодовой единицей; значение такой кодовой единицы может совпадать со значением кодовой единицы для элемента базового набора литеральных символов. Кодировки исполнительных наборов символов могут быть несвязанными с любой литеральной кодировкой.
Обычная кодировка литералов — это кодировка, применяемая к обычным символьным или строковым литералам. Широкая кодировка литералов — это кодировка, применяемая к широким символьным или строковым литералам.
Символ U+0000 NULL кодируется значением 0. Ни один другой элемент набора символов трансляции не кодируется кодовой единицей со значением 0. Значение кодовой единицы каждого символа десятичной цифры после цифры 0 (U+0030) должно быть на единицу больше значения предыдущей. Обычная и расширенная кодировки литералов в остальном определяются реализацией.
Для 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++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| CWG 788 | C++98 |
the values of the members of the execution character sets
were implementation-defined, but were not locale-specific |
they are locale-specific |
| CWG 1796 | C++98 |
the representation of the null (wide) character in
basic execution (wide-)character set had all zero bits |
only required value to be zero |
Смотрите также
| Таблица ASCII | |
|
Документация C
для
Наборы символов и кодировки
|