Null-terminated multibyte strings
Нуль-терминированная многобайтовая строка (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
|