Строки многобайтовой кодировки с нулевым завершением
Строка многобайтовой кодировки с нулевым завершением (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> |
|
|---|---|
| возвращает количество байтов в следующем символе многобайтовой кодировки (функция) |
|
| преобразует следующий символ многобайтовой кодировки в символ широкой кодировки (функция) |
|
| преобразует символ широкой кодировки в его представление в многобайтовой кодировке (функция) |
|
| преобразует строку узкой многобайтовой кодировки в строку широкой кодировки (функция) |
|
| преобразует строку широкой кодировки в строку узкой многобайтовой кодировки (функция) |
|
Определено в заголовке <cwchar> |
|
проверяет, представляет ли объект std::mbstate_t начальное состояние смены кодировки (функция) |
|
| расширяет однобайтовый символ узкой кодировки до символа широкой кодировки, если это возможно (функция) |
|
| сужает символ широкой кодировки до однобайтового символа узкой кодировки, если это возможно (функция) |
|
| возвращает количество байтов в следующем символе многобайтовой кодировки, учитывая состояние (функция) |
|
| преобразует следующий символ многобайтовой кодировки в символ широкой кодировки, учитывая состояние (функция) |
|
| преобразует символ широкой кодировки в его представление в многобайтовой кодировке, учитывая состояние (функция) |
|
| преобразует строку узкой многобайтовой кодировки в строку широкой кодировки, учитывая состояние (функция) |
|
| преобразует строку широкой кодировки в строку узкой многобайтовой кодировки, учитывая состояние (функция) |
|
Определено в заголовке <cuchar> |
|
|
(C++20) | преобразует символ узкой многобайтовой кодировки в кодировку UTF-8 (функция) |
|
(C++20) | преобразует строку UTF-8 в кодировку узкой многобайтовой кодировки (функция) |
|
(C++11) | преобразует символ узкой многобайтовой кодировки в кодировку UTF-16 (функция) |
|
(C++11) | преобразует 16-битный символ широкой кодировки в строку узкой многобайтовой кодировки (функция) |
|
(C++11) | преобразует символ узкой многобайтовой кодировки в кодировку UTF-32 (функция) |
|
(C++11) | преобразует 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 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/multibyte