Namespaces
Variants

Null-terminated multibyte strings

From ru.cppreference.net

Нуль-терминированная многобайтовая строка (NTMBS), или "многобайтовая строка", представляет собой последовательность ненулевых байтов, за которыми следует байт со значением ноль (завершающий нулевой символ).

Каждый символ, хранящийся в строке, может занимать более одного байта. Кодировка, используемая для представления символов в многобайтовой строке, зависит от локали: это может быть UTF-8, GB18030, EUC-JP, Shift-JIS и т.д. Например, массив char { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } представляет NTMBS, содержащую строку "你好" в многобайтовой кодировке UTF-8: первые три байта кодируют символ 你, следующие три байта кодируют символ 好. Та же строка, закодированная в GB18030, представляет собой массив char { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } , где каждый из двух символов кодируется двухбайтовой последовательностью.

В некоторых многобайтовых кодировках любая заданная многобайтовая последовательность символов может представлять различные символы в зависимости от предыдущих байтовых последовательностей, известных как "сдвиговые последовательности". Такие кодировки называются зависимыми от состояния: для интерпретации каждого символа требуется знание текущего состояния сдвига. NTMBS является корректной только если она начинается и заканчивается в начальном состоянии сдвига: если использовалась сдвиговая последовательность, соответствующая разсдвиговая последовательность должна присутствовать перед завершающим нулевым символом. Примерами таких кодировок являются 7-битная JIS, BOCU-1 и SCSU .

Многобайтовая символьная строка является layout-совместимой с null-terminated byte string (NTBS), то есть может храниться, копироваться и анализироваться с использованием тех же средств, за исключением подсчёта количества символов. Если установлена корректная локаль, функции ввода-вывода также работают с многобайтовыми строками. Многобайтовые строки могут быть преобразованы в широкие строки и обратно с использованием std::codecvt функций-членов, std::wstring_convert , или следующих зависящих от локали функций преобразования:

Содержание

Функции

Преобразования многобайтовых/широких символов
Определено в заголовочном файле <cstdlib>
возвращает количество байтов в следующем многобайтовом символе
(функция)
преобразует следующий многобайтовый символ в широкий символ
(функция)
преобразует широкий символ в его многобайтовое представление
(функция)
преобразует узкую многобайтовую строку символов в широкую строку
(функция)
преобразует широкую строку в узкую многобайтовую строку символов
(функция)
Определено в заголовочном файле <cwchar>
возвращает количество байтов в следующем многобайтовом символе с учетом состояния
(функция)
проверяет, представляет ли объект std::mbstate_t начальное состояние сдвига
(функция)
расширяет однобайтовый узкий символ до широкого символа, если возможно
(функция)
сужает широкий символ до однобайтового узкого символа, если возможно
(функция)
преобразует следующий многобайтовый символ в широкий символ с учетом состояния
(функция)
преобразует широкий символ в его многобайтовое представление с учетом состояния
(функция)
преобразует узкую многобайтовую строку символов в широкую строку с учетом состояния
(функция)
преобразует широкую строку в узкую многобайтовую строку символов с учетом состояния
(функция)
Определено в заголовочном файле <cuchar>
(C++20)
преобразует узкий многобайтовый символ в кодировку UTF-8
(функция)
(C++20)
преобразует строку UTF-8 в узкую многобайтовую кодировку
(функция)
(C++11)
преобразует узкий многобайтовый символ в кодировку UTF-16
(функция)
(C++11)
преобразует символ UTF-16 в узкую многобайтовую кодировку
(функция)
(C++11)
преобразует узкий многобайтовый символ в кодировку UTF-32
(функция)
(C++11)
преобразует символ UTF-32 в узкую многобайтовую кодировку
(функция)

Типы

Определено в заголовочном файле <cwchar>
информация о состоянии преобразования, необходимая для итерации по многобайтовым строкам символов
(класс)

Макросы

Определено в заголовочном файле <climits>
MB_LEN_MAX
максимальное количество байтов в многобайтовом символе
(макрос-константа)
Определено в заголовочном файле <cstdlib>
MB_CUR_MAX
максимальное количество байтов в многобайтовом символе в текущей локали C
(макрос-переменная)
Определено в заголовочном файле <cuchar>
__STDC_UTF_16__
(C++11)
указывает, что кодировка UTF-16 используется функциями mbrtoc16 и c16rtomb
(макрос-константа)
__STDC_UTF_32__
(C++11)
указывает, что кодировка UTF-32 используется функциями mbrtoc32 и c32rtomb
(макрос-константа)

Смотрите также

Документация C для Null-terminated multibyte strings