Spec-Zone.ru › C++

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

Строка многобайтовой кодировки с нулевым завершением (NTMBS), или «строка многобайтовой кодировки», — это последовательность ненулевых байтов, за которой следует байт со значением ноль (завершающий нулевой символ).

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

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

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

Преобразования многобайтовых/широких символов

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

Типы

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

Макросы

Определено в заголовке <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

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

Spec-Zone.ru

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