Пространства имён
Варианты
Действия

Наборы символов и кодировки

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление потоком
Операторы условного выполнения
if
Операторы итерации (циклы)
Операторы перехода
Функции
Объявление функции
Выражение лямбда-функции
Спецификатор inline
Спецификации динамических исключений (до C++17*)
Спецификатор noexcept (C++11)
Исключения
Пространства имён
Типы
Спецификаторы
decltype (C++11)
auto (C++11)
alignas (C++11)
Спецификаторы длительности хранения
Инициализация
Выражения
Альтернативные представления
Литералы
Логические - Целочисленные - С плавающей запятой
Символьные - Строковые - nullptr (C++11)
Определяемые пользователем (C++11)
Утилиты
Атрибуты (C++11)
Types
Объявление typedef
Объявление псевдонима типа (C++11)
Casts
Неявные преобразования - Явные преобразования
static_cast - dynamic_cast
const_cast - reinterpret_cast
Выделение памяти
Классы
Свойства функции класса
explicit (C++11)
static
Специальные функции-элементы
Шаблоны
Разное
 
 

На этой странице описывается несколько наборов символов, определенных стандартом C++.

Содержание

Набор символов трансляции

Набор символов трансляции состоит из элементов:

  • each abstract character assigned a code point in the Unicode codespace, and
  • a distinct character for each Unicode scalar value not assigned to an abstract character.

Набор символов трансляции представляет собой надмножество базового набора символов и базового литерального набора символов (см. ниже).

(начиная с 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

N O P Q R S T U V W X Y Z

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

n o p q r s t u v w x y z

U+007B Левая фигурная скобка {
U+007C Вертикальная линия |
U+007D Правая фигурная скобка }
U+007E Тильда ~

Следующие символы добавлены в Базовый набор символов начиная с C++26:

Кодовая единица Символ Глиф
U+0024 Доллар $
U+0040 Символ собака @
U+0060 Апостроф `
(начиная с 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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]