Spec-Zone.ru › C++

Многобайтовые строки с нулевым завершением

Многобайтовая строка с нулевым завершением (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.

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

Функции

Преобразования многобайтовых и широких символов
Определено в заголовке <cstdlib>
mblen
возвращает количество байтов в следующем многобайтовом символе
(функция)
mbtowc
преобразует следующий многобайтовый символ в широкий символ
(функция)
wctomb
преобразует широкий символ в его многобайтовое представление
(функция)
mbstowcs
преобразует узкую многобайтовую строку символов в широкую строку
(функция)
wcstombs
преобразует широкую строку в узкую многобайтовую строку символов
(функция)
Определено в заголовке <cwchar>
mbrlen
возвращает количество байтов в следующем многобайтовом символе с учетом состояния
(функция)
mbsinit
проверяет, представляет ли объект std::mbstate_t исходное состояние сдвига
(функция)
btowc
преобразует однобайтовый узкий символ в широкий символ, если это возможно
(функция)
wctob
преобразует широкий символ в однобайтовый узкий символ, если это возможно
(функция)
mbrtowc
преобразует следующий многобайтовый символ в широкий символ с учетом состояния
(функция)
wcrtomb
преобразует широкий символ в его многобайтовое представление с учетом состояния
(функция)
mbsrtowcs
преобразует узкую многобайтовую строку символов в широкую строку с учетом состояния
(функция)
wcsrtombs
преобразует широкую строку в узкую многобайтовую строку символов с учетом состояния
(функция)
Определено в заголовке <cuchar>
mbrtoc8
(C++20)
преобразует узкий многобайтовый символ в кодировку UTF-8
(функция)
c8rtomb
(C++20)
преобразует строку UTF-8 в узкую многобайтовую кодировку
(функция)
mbrtoc16
(C++11)
преобразует узкий многобайтовый символ в кодировку UTF-16
(функция)
c16rtomb
(C++11)
преобразует символ UTF-16 в узкую многобайтовую кодировку
(функция)
mbrtoc32
(C++11)
преобразует узкий многобайтовый символ в кодировку UTF-32
(функция)
c32rtomb
(C++11)
преобразует символ UTF-32 в узкую многобайтовую кодировку
(функция)

Типы

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

Макросы

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/multibyte

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API