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 действительна, только если она начинается и заканчивается в исходном состоянии переключения: если использовалась последовательность переключения, перед завершающим нулевым символом должна присутствовать соответствующая последовательность возврата. Примеры таких кодировок — BOCU-1 и SCSU.

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

Функции

Преобразования многобайтных и широких символов
Определено в заголовочном файле <stdlib.h>
mblen
возвращает количество байтов в следующем многобайтном символе
(функция)
mbtowc
преобразует следующий многобайтный символ в широкий символ
(функция)
wctombwctomb_s
(C11)
преобразует широкий символ в его многобайтовое представление
(функция)
mbstowcsmbstowcs_s
(C11)
преобразует узкую многобайтную строку символов в широкую строку
(функция)
wcstombswcstombs_s
(C11)
преобразует широкую строку в узкую многобайтную строку символов
(функция)
Определено в заголовочном файле <wchar.h>
mbsinit
(C95)
проверяет, представляет ли объект mbstate_t исходное состояние переключения
(функция)
btowc
(C95)
преобразует однобайтовый узкий символ в широкий символ, если это возможно
(функция)
wctob
(C95)
преобразует широкий символ в однобайтовый узкий символ, если это возможно
(функция)
mbrlen
(C95)
возвращает количество байтов в следующем многобайтном символе с учетом состояния
(функция)
mbrtowc
(C95)
преобразует следующий многобайтный символ в широкий символ с учетом состояния
(функция)
wcrtombwcrtomb_s
(C95)(C11)
преобразует широкий символ в его многобайтовое представление с учетом состояния
(функция)
mbsrtowcsmbsrtowcs_s
(C95)(C11)
преобразует узкую многобайтную строку символов в широкую строку с учетом состояния
(функция)
wcsrtombswcsrtombs_s
(C95)(C11)
преобразует широкую строку в узкую многобайтную строку символов с учетом состояния
(функция)
Определено в заголовочном файле <uchar.h>
mbrtoc8
(C23)
преобразует узкий многобайтный символ в кодировку UTF-8
(функция)
c8rtomb
(C23)
преобразует строку UTF-8 в узкую многобайтную кодировку
(функция)
mbrtoc16
(C11)
преобразует узкий многобайтный символ в кодировку UTF-16
(функция)
c16rtomb
(C11)
преобразует символ UTF-16 в узкую многобайтную кодировку
(функция)
mbrtoc32
(C11)
преобразует узкий многобайтный символ в кодировку UTF-32
(функция)
c32rtomb
(C11)
преобразует символ UTF-32 в узкую многобайтную кодировку
(функция)

Типы

Определено в заголовочном файле <uchar.h>
Определено в заголовочном файле <wchar.h>
mbstate_t
(C95)
информация о состоянии преобразования, необходимая для перебора многобайтных строк символов
(класс)
Определено в заголовочном файле <uchar.h>
char8_t
(C23)
8-битный тип символа
(определение типа)
char16_t
(C11)
16-битный тип символа
(определение типа)
char32_t
(C11)
32-битный тип символа
(определение типа)

Макросы

Определено в заголовочном файле <limits.h>
MB_LEN_MAX
максимальное количество байтов в многобайтном символе для любой поддерживаемой локали
(макроконстанта)
Определено в заголовочном файле <stdlib.h>
MB_CUR_MAX
максимальное количество байтов в многобайтном символе в текущей локали
(макропеременная)

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
    • 7.10 Размеры целочисленных типов <limits.h> (с.: уточняется)
    • 7.22 Общие служебные функции <stdlib.h> (с.: уточняется)
    • 7.28 Средства работы с Unicode <uchar.h> (с.: уточняется)
    • 7.29 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: уточняется)
    • 7.31.12 Общие служебные функции <stdlib.h> (с.: уточняется)
    • 7.31.16 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: уточняется)
    • K.3.6 Общие служебные функции <stdlib.h> (с.: уточняется)
    • K.3.9 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: уточняется)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.10 Размеры целочисленных типов <limits.h> (с.: уточняется)
    • 7.22 Общие служебные функции <stdlib.h> (с.: уточняется)
    • 7.28 Средства работы с Unicode <uchar.h> (с.: уточняется)
    • 7.29 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: уточняется)
    • 7.31.12 Общие служебные функции <stdlib.h> (с.: уточняется)
    • 7.31.16 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: уточняется)
    • K.3.6 Общие служебные функции <stdlib.h> (с.: уточняется)
    • K.3.9 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: уточняется)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.10 Размеры целочисленных типов <limits.h> (с.: 222)
    • 7.22 Общие служебные функции <stdlib.h> (с.: 340–360)
    • 7.28 Средства работы с Unicode <uchar.h> (с.: 398–401)
    • 7.29 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: 402–446)
    • 7.31.12 Общие служебные функции <stdlib.h> (с.: 456)
    • 7.31.16 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: 456)
    • K.3.6 Общие служебные функции <stdlib.h> (с.: 604–614)
    • K.3.9 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: 627–651)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.10 Размеры целочисленных типов <limits.h> (с.: 203)
    • 7.20 Общие служебные функции <stdlib.h> (с.: 306–324)
    • 7.24 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: 348–392)
    • 7.26.10 Общие служебные функции <stdlib.h> (с.: 402)
    • 7.26.12 Расширенные средства работы с многобайтными и широкими символами <wchar.h> (с.: 402)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.1.4 Пределы <float.h> и <limits.h>
    • 4.10 ОБЩИЕ СЛУЖЕБНЫЕ ФУНКЦИИ <stdlib.h>
    • 4.13.7 Общие служебные функции <stdlib.h>

См. также

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

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

Spec-Zone.ru

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