Наборы символов и кодировки
На этой странице описывается несколько наборов символов, определенных стандартом C++.
Этот раздел не завершён |
![]() |
Эта страница переведена с использованием автоматического переводчика в режиме минимальных усилий. Если вы видите, что что-то устарело (или не верно), помогите всем нам, обновив её! |
Набор символов трансляцииНабор символов трансляции состоит из элементов:
Набор символов трансляции представляет собой надмножество базового набора символов и базового литерального набора символов (см. ниже). |
(начиная с C++23) |
[править] Базовый набор символов
Базовый набор символов содержит 96 (до C++26)99 (начиная с C++26) символов:
Кодовая единица | Символ | Глиф |
---|---|---|
U+0009 | Горизонтальная табуляция | |
U+000B | Вертикальная табуляция | |
U+000C | Подача страницы (FF) | |
U+0020 | Пробел | |
U+000A | Перевод строки (LF) | новая строка |
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 .. 9 | 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:
|
(начиная с C++26) |
[править] Базовый литеральный набор символов
Базовый литеральный набор символов содержит все символы из Базовый набор символов, плюс управляющие символы:
Кодовая единица | Символ |
---|---|
U+0000 | нулевой символ (NUL) |
U+0007 | звуковой сигнал (BEL) |
U+0008 | возврат на один символ (BS) |
U+000D | возврат каретки (CR) |
[править] Набор символов выполнения
Набор символов выполнения и Набор расширенных символов выполнения являются надмножествами Базового литерального набора символов. Кодировки наборов символов выполнения и наборов дополнительных элементов (если таковые имеются) специфичны в локализациях. Каждый элемент набора расширенных символов выполнения должен быть представлен как отдельная кодовая единица wchar_t.
[править] Кодовая единица и буквенное кодирование
Кодовая единица — это целочисленное значение символьного типа. Символы в символьном литерале отличном от многосимвольного или некодируемого символьного литерала, или в строковом литерале кодируются как последовательность из одной или нескольких кодовых единиц, как определено префиксом кодировки; это называется соответствующей кодировкой литерала.
Буквальное кодирование или кодирование, зависящее от локали, одного из наборов символов выполнения кодирует каждый элемент базового набора символов как одну кодовую единицу с неотрицательным значением, отличную от кодовой единицы для любого другого такого элемента. Символ, не входящий в базовый набор символов, может быть закодирован более чем одной кодовой единицей; значение такой кодовой единицы может быть таким же, как и у кодовой единицы для элемента базового набора символов. Кодировки наборов символов выполнения могут быть не связаны ни с какой кодировкой литерала.
Обычная кодировка литерала — это кодировка, применяемая к обычному символьному или строковому литералу. Широкая кодировка литерала — это кодировка, применяемая к широкому символьному или строковому литералу.
Символ U+0000 NULL кодируется как значение 0. Никакой другой элемент набора символов трансляции не кодируется с кодовой единицей со значением 0. Значение кодовой единицы каждого символа десятичной цифры после цифры 0 (U+0030) должно быть на единицу больше значения предыдущего. Для обычной и широкой литеральной кодировки. В противном случае определяются реализацией.
Для литерала UTF-8, UTF-16 или UTF-32 скалярное значение UCS, соответствующее каждому символу набора символов трансляции, кодируется, как указано в ISO/IEC 10646 для соответствующей формы кодировки UCS.
[править] Примечания
The standard names of some character sets are changed in C++23 via P2314R4.
New name(s) | Old name(s) |
---|---|
basic character set | basic source character set |
basic literal character set | basic execution character set basic execution wide-character set |
Mapping from source file (other than a UTF-8 source file) (начиная с C++23) characters to the basic character set (до C++23)translation character set (начиная с C++23) during translation phase 1 is implementation-defined, so an implementation is required to document how the basic source characters are represented in source files.
[править] Defect reports
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
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 |
[править] Смотрите также
Шаблон:cpp/locale/dsc text encoding Документация C по Character sets and encodings
| |
Документация C++ по Таблица ASCII
| |
определяемые пользователем литералы(C++11) | литералы с пользовательским суффиксом |
символьных литералов | отдельные символы типа char, char16_t, char32_t, или wchar_t
Оригинал: individual characters of type char, char16_t, char32_t, or wchar_t Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
строковые литералы | последовательностей символов, которые могут быть узкими, многобайтовые, или в ширину
Оригинал: sequences of characters, which may be narrow, multibyte, or wide Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |