Документация Python неофициальный перевод

unicode.md

1162 строк · 99.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.11/c-api/unicode.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты Unicode и кодеки89## Объекты Unicode1011Начиная с реализации [**PEP 393**](https://python-all.ru/3.11/c-api/unicode.html) в Python 3.3, объекты Unicode внутри используют различные представления, чтобы обеспечить обработку полного диапазона символов Unicode, оставаясь при этом эффективными по памяти. Существуют особые случаи для строк, где все кодовые точки находятся ниже 128, 256 или 65536; в противном случае кодовые точки должны быть ниже 1114112 (то есть полного диапазона Unicode).1213Представления [Py\_UNICODE](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE)\* и UTF-8 создаются по требованию и кешируются в объекте Unicode. Представление [Py\_UNICODE](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE)\* устарело и неэффективно.1415Из-за перехода между старыми и новыми API объекты Unicode могут внутренне находиться в двух состояниях в зависимости от того, как они были созданы:1617- «канонические» объекты Unicode – это все объекты, созданные не устаревшим Unicode API. Они используют наиболее эффективное представление, допускаемое реализацией.18- «унаследованные» объекты Unicode созданы через один из устаревших API (обычно [`PyUnicode_FromUnicode()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromUnicode)) и содержат только представление [Py\_UNICODE](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE)\*; перед вызовом любого другого API необходимо вызвать [`PyUnicode_READY()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_READY) для них.1920> **Примечание**21>22> «Унаследованный» объект Unicode будет удалён в Python 3.12 вместе с устаревшими API. Все объекты Unicode станут «каноническими» с этого момента. Подробнее см. [**PEP 623**](https://python-all.ru/3.11/c-api/unicode.html).2324### Тип Unicode2526Это основные типы объектов Unicode, используемые в реализации Unicode в Python:2728#### `type Py_UCS4`2930#### `type Py_UCS2`3132#### `type Py_UCS1`3334*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*3536Эти типы являются псевдонимами для беззнаковых целочисленных типов, достаточно широких для хранения символов размером 32, 16 и 8 бит соответственно. При работе с отдельными символами Unicode используйте [`Py_UCS4`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UCS4).3738Новое в версии 3.3.3940#### `type Py_UNICODE`4142Это typedef для `wchar_t`, 16-битный или 32-битный тип в зависимости от платформы.4344Изменено в версии 3.3: В предыдущих версиях это был 16-битный или 32-битный тип в зависимости от того, была ли выбрана «узкая» или «широкая» версия Unicode Python при сборке.4546#### `type PyASCIIObject`4748#### `type PyCompactUnicodeObject`4950#### `type PyUnicodeObject`5152Эти подтипы [`PyObject`](https://python-all.ru/3.11/c-api/structures.html#c.PyObject) представляют объект Unicode в Python. В почти всех случаях их не следует использовать напрямую, так как все функции API, работающие с объектами Unicode, принимают и возвращают указатели [`PyObject`](https://python-all.ru/3.11/c-api/structures.html#c.PyObject).5354Новое в версии 3.3.5556#### `PyTypeObject PyUnicode_Type`5758*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*5960Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.11/c-api/type.html#c.PyTypeObject) представляет тип Unicode в Python. Он доступен коду Python как `str`.6162Следующие API представляют собой макросы C и статические встроенные функции для быстрых проверок и доступа к внутренним данным только для чтения объектов Unicode:6364#### `int PyUnicode_Check(PyObject *obj)`6566Возвращает true, если объект *obj* является объектом Unicode или экземпляром подтипа Unicode. Эта функция всегда завершается успешно.6768#### `int PyUnicode_CheckExact(PyObject *obj)`6970Возвращает true, если объект *obj* является объектом Unicode, но не экземпляром подтипа. Эта функция всегда завершается успешно.7172#### `int PyUnicode_READY(PyObject *unicode)`7374Убедитесь, что строковый объект *o* находится в «каноническом» представлении. Это необходимо перед использованием любых макросов доступа, описанных ниже.7576Возвращает `0` при успехе и `-1` с установленным исключением при неудаче, что в частности происходит при неудаче выделения памяти.7778Новое в версии 3.3.7980Устарело с версии 3.10, будет удалено в версии 3.12: Этот API будет удалён вместе с [`PyUnicode_FromUnicode()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromUnicode).8182#### `Py_ssize_t PyUnicode_GET_LENGTH(PyObject *unicode)`8384Возвращает длину строки Unicode в кодовых точках. *unicode* должен быть объектом Unicode в «каноническом» представлении (не проверяется).8586Новое в версии 3.3.8788#### `Py_UCS1 *PyUnicode_1BYTE_DATA(PyObject *unicode)`8990#### `Py_UCS2 *PyUnicode_2BYTE_DATA(PyObject *unicode)`9192#### `Py_UCS4 *PyUnicode_4BYTE_DATA(PyObject *unicode)`9394Возвращает указатель на каноническое представление, приведённое к целочисленным типам UCS1, UCS2 или UCS4 для прямого доступа к символам. Не выполняется проверок, имеет ли каноническое представление правильный размер символа; используйте [`PyUnicode_KIND()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_KIND) для выбора правильного макроса. Убедитесь, что [`PyUnicode_READY()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_READY) был вызван перед доступом к этому.9596Новое в версии 3.3.9798#### `PyUnicode_WCHAR_KIND`99100#### `PyUnicode_1BYTE_KIND`101102#### `PyUnicode_2BYTE_KIND`103104#### `PyUnicode_4BYTE_KIND`105106Возвращает значения макроса [`PyUnicode_KIND()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_KIND).107108Новое в версии 3.3.109110Устарело с версии 3.10, будет удалено в версии 3.12: `PyUnicode_WCHAR_KIND` устарел.111112#### `int PyUnicode_KIND(PyObject *unicode)`113114Возвращает одну из констант вида PyUnicode (см. выше), которые указывают, сколько байт на символ использует данный объект Unicode для хранения своих данных. *unicode* должен быть объектом Unicode в «каноническом» представлении (не проверяется).115116Новое в версии 3.3.117118#### `void *PyUnicode_DATA(PyObject *unicode)`119120Возвращает указатель void на сырой буфер Unicode. *unicode* должен быть объектом Unicode в «каноническом» представлении (не проверяется).121122Новое в версии 3.3.123124#### `void PyUnicode_WRITE(int kind, void *data, Py_ssize_t index, Py_UCS4 value)`125126Записывает в каноническое представление *data* (полученное с помощью [`PyUnicode_DATA()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DATA)). Эта функция не выполняет проверок корректности и предназначена для использования в циклах. Вызывающий код должен кэшировать значение *kind* и указатель *data*, полученные из других вызовов. *index* – это индекс в строке (начинается с 0), а *value* – это новое значение кодовой точки, которое должно быть записано в эту позицию.127128Новое в версии 3.3.129130#### `Py_UCS4 PyUnicode_READ(int kind, void *data, Py_ssize_t index)`131132Читает кодовую точку из канонического представления *data* (полученного с помощью [`PyUnicode_DATA()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DATA)). Никаких проверок или вызовов готовности не выполняется.133134Новое в версии 3.3.135136#### `Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)`137138Читает символ из объекта Unicode *unicode*, который должен быть в «каноническом» представлении. Это менее эффективно, чем [`PyUnicode_READ()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_READ), если выполняется несколько последовательных чтений.139140Новое в версии 3.3.141142#### `Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *unicode)`143144Возвращает максимальную кодовую точку, подходящую для создания другой строки на основе *unicode*, который должен быть в «каноническом» представлении. Это всегда приближение, но более эффективное, чем перебор строки.145146Новое в версии 3.3.147148#### `Py_ssize_t PyUnicode_GET_SIZE(PyObject *unicode)`149150Возвращает размер устаревшего представления [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) в кодовых единицах (включая суррогатные пары как 2 единицы). *unicode* должен быть объектом Unicode (не проверяется).151152Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, пожалуйста, перейдите на использование [`PyUnicode_GET_LENGTH()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_GET_LENGTH).153154#### `Py_ssize_t PyUnicode_GET_DATA_SIZE(PyObject *unicode)`155156Возвращает размер устаревшего представления [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) в байтах. *unicode* должен быть объектом Unicode (не проверяется).157158Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование [`PyUnicode_GET_LENGTH()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_GET_LENGTH).159160#### `Py_UNICODE *PyUnicode_AS_UNICODE(PyObject *unicode)`161162#### `const char *PyUnicode_AS_DATA(PyObject *unicode)`163164Возвращает указатель на представление [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) объекта. Возвращаемый буфер всегда завершается дополнительным нулевым кодовым символом. Он также может содержать встроенные нулевые кодовые символы, что приведёт к усечению строки при использовании в большинстве функций C. Форма `AS_DATA` приводит указатель к const char\*. Аргумент *unicode* должен быть объектом Unicode (не проверяется).165166Изменено в версии 3.3: Эта функция теперь неэффективна – во многих случаях представление [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) не существует и его нужно создавать – и может завершиться ошибкой (возвращает `NULL` с установленным исключением). Попробуйте перенести код на использование новых макросов `PyUnicode_nBYTE_DATA()` или используйте [`PyUnicode_WRITE()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_WRITE) или [`PyUnicode_READ()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_READ).167168Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование семейства макросов `PyUnicode_nBYTE_DATA()`.169170#### `int PyUnicode_IsIdentifier(PyObject *unicode)`171172*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*173174Возвращает `1`, если строка является допустимым идентификатором в соответствии с определением языка, раздел [Идентификаторы и ключевые слова](https://python-all.ru/3.11/reference/lexical_analysis.html#identifiers). В противном случае возвращает `0`.175176Изменено в версии 3.9: Функция больше не вызывает [`Py_FatalError()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_FatalError), если строка не готова.177178### Свойства символов Unicode179180Unicode предоставляет множество различных свойств символов. Наиболее востребованные из них доступны через следующие макросы, которые сопоставляются с функциями на C в зависимости от конфигурации Python.181182#### `int Py_UNICODE_ISSPACE(Py_UCS4 ch)`183184Возвращает `1` или `0` в зависимости от того, является ли *ch* пробельным символом.185186#### `int Py_UNICODE_ISLOWER(Py_UCS4 ch)`187188Возвращает `1` или `0` в зависимости от того, является ли *ch* символом в нижнем регистре.189190#### `int Py_UNICODE_ISUPPER(Py_UCS4 ch)`191192Возвращает `1` или `0` в зависимости от того, является ли *ch* символом в верхнем регистре.193194#### `int Py_UNICODE_ISTITLE(Py_UCS4 ch)`195196Возвращает `1` или `0` в зависимости от того, является ли *ch* символом в регистре заголовка (titlecase).197198#### `int Py_UNICODE_ISLINEBREAK(Py_UCS4 ch)`199200Возвращает `1` или `0` в зависимости от того, является ли *ch* символом разрыва строки.201202#### `int Py_UNICODE_ISDECIMAL(Py_UCS4 ch)`203204Возвращает `1` или `0` в зависимости от того, является ли *ch* десятичным символом.205206#### `int Py_UNICODE_ISDIGIT(Py_UCS4 ch)`207208Возвращает `1` или `0` в зависимости от того, является ли *ch* цифровым символом.209210#### `int Py_UNICODE_ISNUMERIC(Py_UCS4 ch)`211212Возвращает `1` или `0` в зависимости от того, является ли *ch* числовым символом.213214#### `int Py_UNICODE_ISALPHA(Py_UCS4 ch)`215216Возвращает `1` или `0` в зависимости от того, является ли *ch* буквенным символом.217218#### `int Py_UNICODE_ISALNUM(Py_UCS4 ch)`219220Возвращает `1` или `0` в зависимости от того, является ли *ch* буквенно-цифровым символом.221222#### `int Py_UNICODE_ISPRINTABLE(Py_UCS4 ch)`223224Возвращает `1` или `0` в зависимости от того, является ли *ch* печатным символом. Непечатные символы – это те, которые определены в базе данных Unicode как «Other» или «Separator», за исключением пробела ASCII (0x20), который считается печатным. (Обратите внимание, что печатные символы в этом контексте – это те, которые не должны экранироваться при вызове [`repr()`](https://python-all.ru/3.11/library/functions.html#repr) для строки. Это не влияет на обработку строк, записываемых в [`sys.stdout`](https://python-all.ru/3.11/library/sys.html#sys.stdout) или [`sys.stderr`](https://python-all.ru/3.11/library/sys.html#sys.stderr).)225226Эти API можно использовать для быстрых прямых преобразований символов:227228#### `Py_UCS4 Py_UNICODE_TOLOWER(Py_UCS4 ch)`229230Возвращает символ *ch*, преобразованный в нижний регистр.231232Устарело с версии 3.3: Эта функция использует простые отображения регистра.233234#### `Py_UCS4 Py_UNICODE_TOUPPER(Py_UCS4 ch)`235236Возвращает символ *ch*, преобразованный в верхний регистр.237238Устарело с версии 3.3: Эта функция использует простые отображения регистра.239240#### `Py_UCS4 Py_UNICODE_TOTITLE(Py_UCS4 ch)`241242Возвращает символ *ch*, приведённый к регистру заголовка.243244Устарело с версии 3.3: Эта функция использует простые отображения регистра.245246#### `int Py_UNICODE_TODECIMAL(Py_UCS4 ch)`247248Возвращает символ *ch*, преобразованный в десятичное положительное целое. Возвращает `-1`, если это невозможно. Этот макрос не вызывает исключений.249250#### `int Py_UNICODE_TODIGIT(Py_UCS4 ch)`251252Возвращает символ *ch*, преобразованный в целое однозначное число. Возвращает `-1`, если это невозможно. Этот макрос не вызывает исключений.253254#### `double Py_UNICODE_TONUMERIC(Py_UCS4 ch)`255256Возвращает символ *ch*, преобразованный в double. Возвращает `-1.0`, если это невозможно. Этот макрос не вызывает исключений.257258Эти API можно использовать для работы с суррогатами:259260#### `Py_UNICODE_IS_SURROGATE(ch)`261262Проверяет, является ли *ch* суррогатом (`0xD800 <= ch <= 0xDFFF`).263264#### `Py_UNICODE_IS_HIGH_SURROGATE(ch)`265266Проверяет, является ли *ch* старшим суррогатом (`0xD800 <= ch <= 0xDBFF`).267268#### `Py_UNICODE_IS_LOW_SURROGATE(ch)`269270Проверяет, является ли *ch* младшим суррогатом (`0xDC00 <= ch <= 0xDFFF`).271272#### `Py_UNICODE_JOIN_SURROGATES(high, low)`273274Объединяет два суррогатных символа и возвращает одно значение Py\_UCS4. *high* и *low* – это соответственно старший и младший суррогаты в суррогатной паре.275276### Создание строк Unicode и доступ к ним277278Для создания объектов Unicode и доступа к их базовым свойствам последовательности используйте следующие API:279280#### `PyObject *PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)`281282*Возвращаемое значение: новая ссылка.*283284Создаёт новый объект Unicode. *maxchar* должен быть истинным максимальным кодом, который будет помещён в строку. В качестве приближения его можно округлить до ближайшего значения из последовательности 127, 255, 65535, 1114111.285286Это рекомендуемый способ выделения нового объекта Unicode. Объекты, созданные с помощью этой функции, не подлежат изменению размера.287288Новое в версии 3.3.289290#### `PyObject *PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size)`291292*Возвращаемое значение: новая ссылка.*293294Создаёт новый объект Unicode с заданным *видом* (возможные значения: [`PyUnicode_1BYTE_KIND`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_1BYTE_KIND) и т.д., возвращаемые [`PyUnicode_KIND()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_KIND)). *Буфер* должен указывать на массив из *size* единиц по 1, 2 или 4 байта на символ, в зависимости от вида.295296При необходимости входной *буфер* копируется и преобразуется в каноническое представление. Например, если *buffer* – это строка UCS4 ([`PyUnicode_4BYTE_KIND`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_4BYTE_KIND)) и состоит только из кодовых точек в диапазоне UCS1, она будет преобразована в UCS1 ([`PyUnicode_1BYTE_KIND`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_1BYTE_KIND)).297298Новое в версии 3.3.299300#### `PyObject *PyUnicode_FromStringAndSize(const char *str, Py_ssize_t size)`301302*Возвращаемое значение: новая ссылка.*303304*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*305306Создаёт объект Unicode из символьного буфера *str*. Байты интерпретируются как закодированные в UTF-8. Буфер копируется в новый объект. Если буфер не равен `NULL`, возвращаемое значение может быть разделяемым объектом, то есть изменение данных не допускается.307308Если *str* равен `NULL`, эта функция ведёт себя как [`PyUnicode_FromUnicode()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromUnicode) с буфером, установленным в `NULL`. Такое использование устарело в пользу [`PyUnicode_New()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_New) и будет удалено в Python 3.12.309310#### `PyObject *PyUnicode_FromString(const char *str)`311312*Возвращаемое значение: новая ссылка.*313314*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*315316Создаёт объект Unicode из UTF-8-кодированного нуль-терминированного символьного буфера *str*.317318#### `PyObject *PyUnicode_FromFormat(const char *format, ...)`319320*Возвращаемое значение: новая ссылка.*321322*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*323324Принимает строку формата в стиле C `printf()` *format* и переменное число аргументов, вычисляет размер результирующей строки Python Unicode и возвращает строку со вставленными отформатированными значениями. Переменные аргументы должны быть типами C и должны точно соответствовать символам формата в строке *format*, закодированной в ASCII. Допускаются следующие символы формата:325326| Символы формата | Тип | Описание |327| --- | --- | --- |328| `%%` | *н/д* | Буквальный символ %. |329| `%c` | int | A single character, represented as a C int. |330| `%d` | int | Эквивалентно `printf("%d")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |331| `%u` | unsigned int | Эквивалентно `printf("%u")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |332| `%ld` | long | Эквивалентно `printf("%ld")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |333| `%li` | long | Эквивалентно `printf("%li")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |334| `%lu` | unsigned long | Эквивалентно `printf("%lu")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |335| `%lld` | long long | Эквивалентно `printf("%lld")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |336| `%lli` | long long | Эквивалентно `printf("%lli")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |337| `%llu` | unsigned long long | Эквивалентно `printf("%llu")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |338| `%zd` | [`Py_ssize_t`](https://python-all.ru/3.11/c-api/intro.html#c.Py_ssize_t) | Эквивалентно `printf("%zd")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |339| `%zi` | [`Py_ssize_t`](https://python-all.ru/3.11/c-api/intro.html#c.Py_ssize_t) | Эквивалентно `printf("%zi")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |340| `%zu` | size\_t | Эквивалентно `printf("%zu")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |341| `%i` | int | Эквивалентно `printf("%i")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |342| `%x` | int | Эквивалентно `printf("%x")`. [\[1\]](https://python-all.ru/3.11/c-api/unicode.html#id14) |343| `%s` | const char\* | Нуль-терминированный массив символов C. |344| `%p` | const void\* | Шестнадцатеричное представление указателя C. В основном эквивалентно `printf("%p")`, за исключением того, что гарантированно начинается с литерала `0x` независимо от того, что возвращает `printf` на данной платформе. |345| `%A` | PyObject\* | The result of calling [`ascii()`](https://python-all.ru/3.11/library/functions.html#ascii). |346| `%U` | PyObject\* | Объект Unicode. |347| `%V` | PyObject\*, const char\* | A Unicode object (which may be `NULL`) and a null-terminated C character array as a second parameter (which will be used, if the first parameter is `NULL`). |348| `%S` | PyObject\* | Результат вызова [`PyObject_Str()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_Str). |349| `%R` | PyObject\* | Результат вызова [`PyObject_Repr()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_Repr). |350351Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.352353> **Примечание**354>355> Единицей форматирования ширины является количество символов, а не байтов. Единицей форматирования точности является количество байтов для `"%s"` и `"%V"` (если аргумент `PyObject*` равен `NULL`) и количество символов для `"%A"`, `"%U"`, `"%S"`, `"%R"` и `"%V"` (если аргумент `PyObject*` не равен `NULL`).356357\[1\]358359([1](https://python-all.ru/3.11/c-api/unicode.html#id1),[2](https://python-all.ru/3.11/c-api/unicode.html#id2),[3](https://python-all.ru/3.11/c-api/unicode.html#id3),[4](https://python-all.ru/3.11/c-api/unicode.html#id4),[5](https://python-all.ru/3.11/c-api/unicode.html#id5),[6](https://python-all.ru/3.11/c-api/unicode.html#id6),[7](https://python-all.ru/3.11/c-api/unicode.html#id7),[8](https://python-all.ru/3.11/c-api/unicode.html#id8),[9](https://python-all.ru/3.11/c-api/unicode.html#id9),[10](https://python-all.ru/3.11/c-api/unicode.html#id10),[11](https://python-all.ru/3.11/c-api/unicode.html#id11),[12](https://python-all.ru/3.11/c-api/unicode.html#id12),[13](https://python-all.ru/3.11/c-api/unicode.html#id13))360361Для спецификаторов целых чисел (d, u, ld, li, lu, lld, lli, llu, zd, zi, zu, i, x): флаг преобразования 0 действует, даже если задана точность.362363Изменено в версии 3.2: Добавлена поддержка `"%lld"` и `"%llu"`.364365Изменено в версии 3.3: Добавлена поддержка `"%li"`, `"%lli"` и `"%zi"`.366367Изменено в версии 3.4: Добавлена поддержка форматтеров ширины и точности для `"%s"`, `"%A"`, `"%U"`, `"%V"`, `"%S"`, `"%R"`.368369#### `PyObject *PyUnicode_FromFormatV(const char *format, va_list vargs)`370371*Возвращаемое значение: новая ссылка.*372373*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*374375Идентично [`PyUnicode_FromFormat()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromFormat), за исключением того, что принимает ровно два аргумента.376377#### `PyObject *PyUnicode_FromObject(PyObject *obj)`378379*Возвращаемое значение: новая ссылка.*380381*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*382383Копирует экземпляр подтипа Unicode в новый настоящий объект Unicode, если это необходимо. Если *obj* уже является настоящим объектом Unicode (не подтипом), возвращает новую [сильную ссылку](https://python-all.ru/3.11/glossary.html#term-strong-reference) на этот объект.384385Объекты, отличные от Unicode или его подтипов, вызывают [`TypeError`](https://python-all.ru/3.11/library/exceptions.html#TypeError).386387#### `PyObject *PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors)`388389*Возвращаемое значение: новая ссылка.*390391*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*392393Декодирует закодированный объект *obj* в объект Unicode.394395[`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes), [`bytearray`](https://python-all.ru/3.11/library/stdtypes.html#bytearray) и другие [объекты, подобные байтовым строкам](https://python-all.ru/3.11/glossary.html#term-bytes-like-object) декодируются в соответствии с заданной *encoding* и с использованием обработки ошибок, определённой *errors*. Оба параметра могут быть `NULL`, чтобы интерфейс использовал значения по умолчанию (см. [Встроенные кодеки](https://python-all.ru/3.11/c-api/unicode.html#builtincodecs) для подробностей).396397Все остальные объекты, включая объекты Unicode, приводят к установке [`TypeError`](https://python-all.ru/3.11/library/exceptions.html#TypeError).398399API возвращает `NULL` в случае ошибки. Вызывающий отвечает за уменьшение счётчика ссылок (decref) возвращённых объектов.400401#### `Py_ssize_t PyUnicode_GetLength(PyObject *unicode)`402403*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*404405Возвращает длину объекта Unicode в кодовых точках.406407Новое в версии 3.3.408409#### `Py_ssize_t PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start, PyObject *from, Py_ssize_t from_start, Py_ssize_t how_many)`410411Копирует символы из одного объекта Unicode в другой. При необходимости выполняет преобразование символов и, если возможно, использует `memcpy()`. Возвращает `-1` и устанавливает исключение при ошибке, в противном случае возвращает количество скопированных символов.412413Новое в версии 3.3.414415#### `Py_ssize_t PyUnicode_Fill(PyObject *unicode, Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char)`416417Заполняет строку символом: записывает *fill\_char* в `unicode[start:start+length]`.418419Завершается ошибкой, если *fill\_char* больше максимального символа строки или если у строки больше одной ссылки.420421Возвращает количество записанных символов или `-1` и возбуждает исключение при ошибке.422423Новое в версии 3.3.424425#### `int PyUnicode_WriteChar(PyObject *unicode, Py_ssize_t index, Py_UCS4 character)`426427*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*428429Записывает символ в строку. Строка должна быть создана с помощью [`PyUnicode_New()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_New). Поскольку строки Unicode считаются неизменяемыми, строка не должна быть общей или уже хэшированной.430431Эта функция проверяет, что *unicode* является объектом Unicode, индекс не выходит за границы, и объект можно безопасно изменять (т.е. его счётчик ссылок равен единице).432433Новое в версии 3.3.434435#### `Py_UCS4 PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index)`436437*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*438439Читает символ из строки. Эта функция проверяет, что *unicode* является объектом Unicode и индекс не выходит за границы, в отличие от [`PyUnicode_READ_CHAR()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_READ_CHAR), которая не выполняет проверку ошибок.440441Новое в версии 3.3.442443#### `PyObject *PyUnicode_Substring(PyObject *unicode, Py_ssize_t start, Py_ssize_t end)`444445*Возвращаемое значение: новая ссылка.*446447*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*448449Возвращает подстроку *unicode*, от индекса символа *start* (включительно) до индекса символа *end* (исключительно). Отрицательные индексы не поддерживаются.450451Новое в версии 3.3.452453#### `Py_UCS4 *PyUnicode_AsUCS4(PyObject *unicode, Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null)`454455*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*456457Копирует строку *unicode* в буфер UCS4, включая нулевой символ, если *copy\_null* установлен. Возвращает `NULL` и устанавливает исключение при ошибке (в частности, [`SystemError`](https://python-all.ru/3.11/library/exceptions.html#SystemError), если *buflen* меньше длины *unicode*). При успехе возвращается *buffer*.458459Новое в версии 3.3.460461#### `Py_UCS4 *PyUnicode_AsUCS4Copy(PyObject *unicode)`462463*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*464465Копирует строку *unicode* в новый буфер UCS4, выделенный с помощью [`PyMem_Malloc()`](https://python-all.ru/3.11/c-api/memory.html#c.PyMem_Malloc). В случае неудачи возвращается `NULL` с установленным [`MemoryError`](https://python-all.ru/3.11/library/exceptions.html#MemoryError). Возвращаемый буфер всегда содержит дополнительный нулевой код в конце.466467Новое в версии 3.3.468469### Устаревшие API Py\_UNICODE470471Устарело с версии 3.3, будет удалено в версии 3.12.472473Эти функции API устарели с реализацией [**PEP 393**](https://python-all.ru/3.11/c-api/unicode.html). Модули-расширения могут продолжать их использовать, поскольку они не будут удалены в Python 3.x, но следует учитывать, что их использование теперь может приводить к снижению производительности и увеличению потребления памяти.474475#### `PyObject *PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)`476477*Возвращаемое значение: новая ссылка.*478479Создаёт объект Unicode из буфера Py\_UNICODE *u* заданного размера. *u* может быть `NULL`, что делает содержимое неопределённым. Пользователь отвечает за заполнение необходимых данных. Буфер копируется в новый объект.480481Если буфер не равен `NULL`, возвращаемое значение может быть разделяемым объектом. Поэтому изменение полученного объекта Unicode разрешено только тогда, когда *u* равен `NULL`.482483Если буфер равен `NULL`, [`PyUnicode_READY()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_READY) должен быть вызван после заполнения содержимого строки, перед использованием любых макросов доступа, таких как [`PyUnicode_KIND()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_KIND).484485Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, перейдите на использование [`PyUnicode_FromKindAndData()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromKindAndData), [`PyUnicode_FromWideChar()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromWideChar) или [`PyUnicode_New()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_New).486487#### `Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode)`488489Возвращает указатель только для чтения на внутренний буфер [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) объекта Unicode или `NULL` в случае ошибки. При необходимости создаётся представление [Py\_UNICODE](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE)\* объекта, если его ещё нет. Буфер всегда завершается дополнительным нулевым кодовым символом. Обратите внимание, что результирующая строка [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) может содержать встроенные нулевые кодовые символы, что приведёт к усечению строки при использовании в большинстве функций C.490491Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, перейдите на использование [`PyUnicode_AsUCS4()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_AsUCS4), [`PyUnicode_AsWideChar()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_AsWideChar), [`PyUnicode_ReadChar()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_ReadChar) или аналогичных новых API.492493#### `Py_UNICODE *PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)`494495Как [`PyUnicode_AsUnicode()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_AsUnicode), но также сохраняет длину массива [`Py_UNICODE()`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE) (исключая дополнительный нулевой терминатор) в *size*. Обратите внимание, что результирующая строка [Py\_UNICODE](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE)\* может содержать встроенные нулевые кодовые символы, что приведёт к усечению строки при использовании в большинстве функций C.496497Новое в версии 3.3.498499Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, перейдите на использование [`PyUnicode_AsUCS4()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_AsUCS4), [`PyUnicode_AsWideChar()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_AsWideChar), [`PyUnicode_ReadChar()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_ReadChar) или аналогичных новых API.500501#### `Py_ssize_t PyUnicode_GetSize(PyObject *unicode)`502503*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*504505Возвращает размер устаревшего представления [`Py_UNICODE`](https://python-all.ru/3.11/c-api/unicode.html#c.Py_UNICODE), в кодовых единицах (суррогатные пары учитываются как 2 единицы).506507Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование [`PyUnicode_GET_LENGTH()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_GET_LENGTH).508509### Кодировка локали510511Текущую кодировку локали можно использовать для декодирования текста из операционной системы.512513#### `PyObject *PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t length, const char *errors)`514515*Возвращаемое значение: новая ссылка.*516517*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*518519Decode a string from UTF-8 on Android and VxWorks, or from the current locale encoding on other platforms. The supported error handlers are `"strict"` and `"surrogateescape"` ([**PEP 383**](https://python-all.ru/3.11/c-api/unicode.html)). The decoder uses `"strict"` error handler if *errors* is `NULL`. *str* must end with a null character but cannot contain embedded null characters.520521Используйте [`PyUnicode_DecodeFSDefaultAndSize()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize) для декодирования строки из `Py_FileSystemDefaultEncoding` (кодировка локали, полученная при запуске Python).522523Эта функция игнорирует [режим UTF-8 Python](https://python-all.ru/3.11/library/os.html#utf8-mode).524525> **См. также**526>527> Функция [`Py_DecodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_DecodeLocale).528529Новое в версии 3.3.530531Изменено в версии 3.7: Теперь функция также использует текущую кодировку локали для обработчика ошибок `surrogateescape`, за исключением Android. Ранее для `surrogateescape` использовался [`Py_DecodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_DecodeLocale), а для `strict` использовалась текущая кодировка локали.532533#### `PyObject *PyUnicode_DecodeLocale(const char *str, const char *errors)`534535*Возвращаемое значение: новая ссылка.*536537*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*538539Аналогично [`PyUnicode_DecodeLocaleAndSize()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeLocaleAndSize), но длина строки вычисляется с помощью `strlen()`.540541Новое в версии 3.3.542543#### `PyObject *PyUnicode_EncodeLocale(PyObject *unicode, const char *errors)`544545*Возвращаемое значение: новая ссылка.*546547*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*548549Encode a Unicode object to UTF-8 on Android and VxWorks, or to the current locale encoding on other platforms. The supported error handlers are `"strict"` and `"surrogateescape"` ([**PEP 383**](https://python-all.ru/3.11/c-api/unicode.html)). The encoder uses `"strict"` error handler if *errors* is `NULL`. Return a [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) object. *unicode* cannot contain embedded null characters.550551Используйте [`PyUnicode_EncodeFSDefault()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_EncodeFSDefault) для кодирования строки в `Py_FileSystemDefaultEncoding` (кодировка локали, полученная при запуске Python).552553Эта функция игнорирует [режим UTF-8 Python](https://python-all.ru/3.11/library/os.html#utf8-mode).554555> **См. также**556>557> Функция [`Py_EncodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_EncodeLocale).558559Новое в версии 3.3.560561Изменено в версии 3.7: Теперь функция также использует текущую кодировку локали для обработчика ошибок `surrogateescape`, за исключением Android. Ранее для `surrogateescape` использовался [`Py_EncodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_EncodeLocale), а для `strict` использовалась текущая кодировка локали.562563### Кодировка файловой системы564565Для кодирования и декодирования имён файлов и других строк окружения в качестве кодировки следует использовать `Py_FileSystemDefaultEncoding`, а в качестве обработчика ошибок – `Py_FileSystemDefaultEncodeErrors` ([**PEP 383**](https://python-all.ru/3.11/c-api/unicode.html) и [**PEP 529**](https://python-all.ru/3.11/c-api/unicode.html)). Для кодирования имён файлов в [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) при разборе аргументов следует использовать преобразователь `"O&"`, передавая [`PyUnicode_FSConverter()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FSConverter) в качестве функции преобразования:566567#### `int PyUnicode_FSConverter(PyObject *obj, void *result)`568569*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*570571Преобразователь ParseTuple: кодирует объекты [`str`](https://python-all.ru/3.11/library/stdtypes.html#str), полученные напрямую или через интерфейс [`os.PathLike`](https://python-all.ru/3.11/library/os.html#os.PathLike), в [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) с помощью [`PyUnicode_EncodeFSDefault()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_EncodeFSDefault); объекты [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) выводятся как есть. *result* должен быть [PyBytesObject](https://python-all.ru/3.11/c-api/bytes.html#c.PyBytesObject)\*, который должен освобождаться, когда он больше не используется.572573Новое в версии 3.1.574575Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.11/glossary.html#term-path-like-object).576577Для декодирования имен файлов в [`str`](https://python-all.ru/3.11/library/stdtypes.html#str) во время разбора аргументов следует использовать конвертер `"O&"`, передавая [`PyUnicode_FSDecoder()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FSDecoder) в качестве функции преобразования:578579#### `int PyUnicode_FSDecoder(PyObject *obj, void *result)`580581*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*582583Преобразователь ParseTuple: декодирует объекты [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes), полученные напрямую или косвенно через интерфейс [`os.PathLike`](https://python-all.ru/3.11/library/os.html#os.PathLike), в [`str`](https://python-all.ru/3.11/library/stdtypes.html#str) с помощью [`PyUnicode_DecodeFSDefaultAndSize()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize); объекты [`str`](https://python-all.ru/3.11/library/stdtypes.html#str) выводятся как есть. *result* должен быть [PyUnicodeObject](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicodeObject)\*, который должен освобождаться, когда он больше не используется.584585Новое в версии 3.2.586587Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.11/glossary.html#term-path-like-object).588589#### `PyObject *PyUnicode_DecodeFSDefaultAndSize(const char *str, Py_ssize_t size)`590591*Возвращаемое значение: новая ссылка.*592593*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*594595Декодирует строку из [кодировки файловой системы и обработчика ошибок](https://python-all.ru/3.11/glossary.html#term-filesystem-encoding-and-error-handler).596597Если `Py_FileSystemDefaultEncoding` не задана, используется кодировка локали.598599`Py_FileSystemDefaultEncoding` инициализируется при запуске из кодировки локали и не может быть изменена позднее. Если требуется декодировать строку из текущей кодировки локали, используйте [`PyUnicode_DecodeLocaleAndSize()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeLocaleAndSize).600601> **См. также**602>603> Функция [`Py_DecodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_DecodeLocale).604605Изменено в версии 3.6: Используйте обработчик ошибок `Py_FileSystemDefaultEncodeErrors`.606607#### `PyObject *PyUnicode_DecodeFSDefault(const char *str)`608609*Возвращаемое значение: новая ссылка.*610611*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*612613Декодирует строку, завершающуюся нулевым символом, из [кодировки файловой системы и обработчика ошибок](https://python-all.ru/3.11/glossary.html#term-filesystem-encoding-and-error-handler).614615Если `Py_FileSystemDefaultEncoding` не задана, используется кодировка локали.616617Используйте [`PyUnicode_DecodeFSDefaultAndSize()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize), если известна длина строки.618619Изменено в версии 3.6: Используйте обработчик ошибок `Py_FileSystemDefaultEncodeErrors`.620621#### `PyObject *PyUnicode_EncodeFSDefault(PyObject *unicode)`622623*Возвращаемое значение: новая ссылка.*624625*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*626627Кодирует объект Unicode в `Py_FileSystemDefaultEncoding` с обработчиком ошибок `Py_FileSystemDefaultEncodeErrors` и возвращает [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes). Обратите внимание, что результирующий объект [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) может содержать нулевые байты.628629Если `Py_FileSystemDefaultEncoding` не задана, используется кодировка локали.630631`Py_FileSystemDefaultEncoding` инициализируется при запуске из кодировки локали и не может быть изменена позднее. Если требуется закодировать строку в текущую кодировку локали, используйте [`PyUnicode_EncodeLocale()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_EncodeLocale).632633> **См. также**634>635> Функция [`Py_EncodeLocale()`](https://python-all.ru/3.11/c-api/sys.html#c.Py_EncodeLocale).636637Новое в версии 3.2.638639Изменено в версии 3.6: Используйте обработчик ошибок `Py_FileSystemDefaultEncodeErrors`.640641### Поддержка wchar\_t642643`wchar_t` поддержка на платформах, которые её поддерживают:644645#### `PyObject *PyUnicode_FromWideChar(const wchar_t *wstr, Py_ssize_t size)`646647*Возвращаемое значение: новая ссылка.*648649*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*650651Создаёт объект Unicode из буфера `wchar_t` *wstr* заданного *размера*. Передача `-1` в качестве *размера* указывает, что функция должна сама вычислить длину с помощью `wcslen()`. В случае ошибки возвращает `NULL`.652653#### `Py_ssize_t PyUnicode_AsWideChar(PyObject *unicode, wchar_t *wstr, Py_ssize_t size)`654655*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*656657Копирует содержимое объекта Unicode в буфер `wchar_t` *wstr*. Копируется не более *size* `wchar_t` символов (исключая возможно завершающий нулевой символ). Возвращает количество скопированных `wchar_t` символов или `-1` в случае ошибки.658659Если *wstr* равно `NULL`, вместо этого возвращает *размер*, который потребуется для хранения всего *unicode*, включая завершающий нуль.660661Обратите внимание, что результирующая строка wchar\_t\* может быть как завершена нулевым символом, так и нет. Вызывающий код должен гарантировать, что строка wchar\_t\* завершается нулевым символом, если это требуется приложением. Кроме того, строка wchar\_t\* может содержать нулевые символы, что приведёт к усечению строки при использовании с большинством функций C.662663#### `wchar_t *PyUnicode_AsWideCharString(PyObject *unicode, Py_ssize_t *size)`664665*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*666667Преобразует объект Unicode в широкую строку. Результирующая строка всегда завершается нулевым символом. Если *size* не равно `NULL`, записывает количество широких символов (исключая завершающий нулевой символ) в *\*size*. Обратите внимание, что результирующая строка `wchar_t` может содержать нулевые символы, что приведёт к усечению строки при использовании с большинством функций C. Если *size* равно `NULL` и строка wchar\_t\* содержит нулевые символы, возбуждается [`ValueError`](https://python-all.ru/3.11/library/exceptions.html#ValueError).668669В случае успеха возвращает буфер, выделенный функцией [`PyMem_New`](https://python-all.ru/3.11/c-api/memory.html#c.PyMem_New) (для освобождения используйте [`PyMem_Free()`](https://python-all.ru/3.11/c-api/memory.html#c.PyMem_Free)). При ошибке возвращает `NULL`, а *\*size* не определён. Возбуждает [`MemoryError`](https://python-all.ru/3.11/library/exceptions.html#MemoryError), если выделение памяти не удалось.670671Новое в версии 3.2.672673Изменено в версии 3.7: Возбуждает [`ValueError`](https://python-all.ru/3.11/library/exceptions.html#ValueError), если *size* равно `NULL` и строка wchar\_t\* содержит нулевые символы.674675## Встроенные кодеки676677Python предоставляет набор встроенных кодеков, написанных на C для скорости. Все эти кодеки могут использоваться напрямую через следующие функции.678679Многие из следующих API принимают два аргумента: encoding и errors, и их семантика совпадает с семантикой соответствующих аргументов встроенного конструктора строк [`str()`](https://python-all.ru/3.11/library/stdtypes.html#str).680681Установка кодировки в `NULL` приводит к использованию кодировки по умолчанию, которая является UTF-8. Системные вызовы файловой системы должны использовать [`PyUnicode_FSConverter()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FSConverter) для кодирования имён файлов. Для этого внутри используется переменная `Py_FileSystemDefaultEncoding`. Эту переменную следует считать доступной только для чтения: в некоторых системах это будет указатель на статическую строку, в других – она будет изменяться во время выполнения (например, когда приложение вызывает setlocale).682683Обработка ошибок задаётся параметром errors, который также может быть установлен в `NULL`, что означает использование обработки по умолчанию, определённой для кодека. По умолчанию для всех встроенных кодеков используется строгий режим (возбуждается [`ValueError`](https://python-all.ru/3.11/library/exceptions.html#ValueError)).684685Все кодеки используют схожий интерфейс. Для простоты документированы только отличия от приведённого ниже общего описания.686687### Общие кодеки688689Это общие API кодеков:690691#### `PyObject *PyUnicode_Decode(const char *str, Py_ssize_t size, const char *encoding, const char *errors)`692693*Возвращаемое значение: новая ссылка.*694695*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*696697Создаёт объект Unicode путём декодирования *size* байт закодированной строки *str*. Параметры *encoding* и *errors* имеют тот же смысл, что и одноимённые параметры встроенной функции [`str()`](https://python-all.ru/3.11/library/stdtypes.html#str). Используемый кодек ищется с помощью реестра кодеков Python. Возвращает `NULL`, если кодек возбудил исключение.698699#### `PyObject *PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)`700701*Возвращаемое значение: новая ссылка.*702703*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*704705Кодирует объект Unicode и возвращает результат в виде объекта bytes. Параметры *encoding* и *errors* имеют тот же смысл, что и одноимённые параметры метода [`encode()`](https://python-all.ru/3.11/library/stdtypes.html#str.encode) объекта Unicode. Используемый кодек ищется с помощью реестра кодеков Python. Возвращает `NULL`, если кодек возбудил исключение.706707### Кодеки UTF-8708709Это API кодеков UTF-8:710711#### `PyObject *PyUnicode_DecodeUTF8(const char *str, Py_ssize_t size, const char *errors)`712713*Возвращаемое значение: новая ссылка.*714715*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*716717Создаёт объект Unicode, декодируя *size* байтов UTF-8-закодированной строки *str*. Возвращает `NULL`, если кодек вызвал исключение.718719#### `PyObject *PyUnicode_DecodeUTF8Stateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)`720721*Возвращаемое значение: новая ссылка.*722723*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*724725Если *consumed* равно `NULL`, ведёт себя как [`PyUnicode_DecodeUTF8()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeUTF8). Если *consumed* не равно `NULL`, неполные конечные последовательности байтов UTF-8 не будут считаться ошибкой. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в *consumed*.726727#### `PyObject *PyUnicode_AsUTF8String(PyObject *unicode)`728729*Возвращаемое значение: новая ссылка.*730731*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*732733Кодирует объект Unicode в UTF-8 и возвращает результат в виде объекта bytes Python. Обработка ошибок – «strict». Возвращает `NULL`, если кодек вызвал исключение.734735#### `const char *PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)`736737*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.10.*738739Возвращает указатель на UTF-8-кодировку объекта Unicode и сохраняет размер закодированного представления (в байтах) в *size*. Аргумент *size* может быть `NULL`; в этом случае размер не сохраняется. Возвращаемый буфер всегда содержит дополнительный нулевой байт в конце (не включён в *size*), независимо от наличия других нулевых кодовых точек.740741В случае ошибки возвращается `NULL` с установленным исключением, а *size* не сохраняется.742743Это кеширует UTF-8-представление строки в объекте Unicode, и последующие вызовы будут возвращать указатель на тот же буфер. Вызывающий не отвечает за освобождение буфера. Буфер освобождается, а указатели на него становятся недействительными, когда объект Unicode удаляется сборщиком мусора.744745Новое в версии 3.3.746747Изменено в версии 3.7: Тип возвращаемого значения теперь `const char *` вместо `char *`.748749Изменено в версии 3.10: Эта функция является частью [ограниченного API](https://python-all.ru/3.11/c-api/stable.html#limited-c-api).750751#### `const char *PyUnicode_AsUTF8(PyObject *unicode)`752753Как [`PyUnicode_AsUTF8AndSize()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_AsUTF8AndSize), но не сохраняет размер.754755Новое в версии 3.3.756757Изменено в версии 3.7: Тип возвращаемого значения теперь `const char *` вместо `char *`.758759### Кодеки UTF-32760761Это API кодеков UTF-32:762763#### `PyObject *PyUnicode_DecodeUTF32(const char *str, Py_ssize_t size, const char *errors, int *byteorder)`764765*Возвращаемое значение: новая ссылка.*766767*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*768769Декодирует *size* байтов из буферной строки, закодированной в UTF-32, и возвращает соответствующий объект Unicode. *errors* (если не `NULL`) определяет обработку ошибок. По умолчанию – «strict».770771Если *byteorder* не равно `NULL`, декодер начинает декодирование с указанным порядком байтов:772773```c774*byteorder == -1: little endian775*byteorder == 0:  native order776*byteorder == 1:  big endian777```778779Если `*byteorder` равен нулю и первые четыре байта входных данных являются маркером порядка байтов (BOM), декодер переключается на этот порядок байтов, и BOM не копируется в результирующую строку Unicode. Если `*byteorder` равно `-1` или `1`, любой маркер порядка байтов копируется в выходные данные.780781После завершения *\*byteorder* устанавливается в текущий порядок байтов в конце входных данных.782783Если *byteorder* равен `NULL`, кодек запускается в режиме собственного порядка байтов.784785Возвращает `NULL`, если кодек вызвал исключение.786787#### `PyObject *PyUnicode_DecodeUTF32Stateful(const char *str, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)`788789*Возвращаемое значение: новая ссылка.*790791*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*792793Если *consumed* равно `NULL`, ведёт себя как [`PyUnicode_DecodeUTF32()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeUTF32). Если *consumed* не равно `NULL`, [`PyUnicode_DecodeUTF32Stateful()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeUTF32Stateful) не будет считать неполные конечные последовательности байтов UTF-32 (например, количество байтов, не делящееся на четыре) ошибкой. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в *consumed*.794795#### `PyObject *PyUnicode_AsUTF32String(PyObject *unicode)`796797*Возвращаемое значение: новая ссылка.*798799*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*800801Возвращает байтовую строку Python в кодировке UTF-32 в собственном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок – «strict». Возвращает `NULL`, если кодек вызвал исключение.802803### Кодеки UTF-32804805Это API кодеков UTF-32:806807#### `PyObject *PyUnicode_DecodeUTF32(const char *str, Py_ssize_t size, const char *errors, int *byteorder)`808809*Возвращаемое значение: новая ссылка.*810811*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*812813Декодирует *size* байтов из строки буфера, закодированной в UTF-16, и возвращает соответствующий объект Unicode. *errors* (если не `NULL`) определяет обработку ошибок. По умолчанию используется «strict».814815Если *byteorder* не равно `NULL`, декодер начинает декодирование с указанным порядком байтов:816817```c818*byteorder == -1: little endian819*byteorder == 0:  native order820*byteorder == 1:  big endian821```822823Если `*byteorder` равен нулю и первые два байта входных данных являются меткой порядка байтов (BOM), декодер переключается на этот порядок байтов, а BOM не копируется в результирующую строку Unicode. Если `*byteorder` равен `-1` или `1`, любая метка порядка байтов копируется в выходные данные (что приведёт к символу `\ufeff` или `\ufffe`).824825После завершения `*byteorder` устанавливается в текущий порядок байтов в конце входных данных.826827Если *byteorder* равен `NULL`, кодек запускается в режиме собственного порядка байтов.828829Возвращает `NULL`, если кодек вызвал исключение.830831#### `PyObject *PyUnicode_DecodeUTF16Stateful(const char *str, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)`832833*Возвращаемое значение: новая ссылка.*834835*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*836837Если *consumed* равен `NULL`, ведёт себя как [`PyUnicode_DecodeUTF16()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeUTF16). Если *consumed* не равен `NULL`, [`PyUnicode_DecodeUTF16Stateful()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeUTF16Stateful) не будет рассматривать хвостовые неполные последовательности байтов UTF-16 (например, нечётное количество байтов или разбитую суррогатную пару) как ошибку. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в *consumed*.838839#### `PyObject *PyUnicode_AsUTF16String(PyObject *unicode)`840841*Возвращаемое значение: новая ссылка.*842843*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*844845Возвращает байтовую строку Python в кодировке UTF-16 в собственном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок – «strict». Возвращает `NULL`, если кодек вызвал исключение.846847### Кодеки UTF-7848849Это API кодеков UTF-7:850851#### `PyObject *PyUnicode_DecodeUTF7(const char *str, Py_ssize_t size, const char *errors)`852853*Возвращаемое значение: новая ссылка.*854855*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*856857Создаёт объект Unicode путём декодирования *size* байтов строки, закодированной в UTF-7, *str*. Возвращает `NULL`, если кодек вызвал исключение.858859#### `PyObject *PyUnicode_DecodeUTF7Stateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)`860861*Возвращаемое значение: новая ссылка.*862863*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*864865Если *consumed* равен `NULL`, ведёт себя как [`PyUnicode_DecodeUTF7()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeUTF7). Если *consumed* не равен `NULL`, хвостовые неполные секции base-64 UTF-7 не будут рассматриваться как ошибка. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в *consumed*.866867### Кодеки Unicode-Escape868869Это API кодеков «Unicode Escape»:870871#### `PyObject *PyUnicode_DecodeUnicodeEscape(const char *str, Py_ssize_t size, const char *errors)`872873*Возвращаемое значение: новая ссылка.*874875*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*876877Создаёт объект Unicode путём декодирования *size* байтов строки, закодированной в Unicode-Escape, *str*. Возвращает `NULL`, если кодек вызвал исключение.878879#### `PyObject *PyUnicode_AsUnicodeEscapeString(PyObject *unicode)`880881*Возвращаемое значение: новая ссылка.*882883*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*884885Кодирует объект Unicode с помощью Unicode-Escape и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает `NULL`, если кодек вызвал исключение.886887### Кодеки Raw-Unicode-Escape888889Это API кодеков «Raw Unicode Escape»:890891#### `PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *str, Py_ssize_t size, const char *errors)`892893*Возвращаемое значение: новая ссылка.*894895*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*896897Создаёт объект Unicode путём декодирования *size* байтов строки, закодированной в Raw-Unicode-Escape, *str*. Возвращает `NULL`, если кодек вызвал исключение.898899#### `PyObject *PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode)`900901*Возвращаемое значение: новая ссылка.*902903*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*904905Кодирует объект Unicode с помощью Raw-Unicode-Escape и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает `NULL`, если кодек вызвал исключение.906907### Кодеки Latin-1908909Это API кодеков Latin-1: Latin-1 соответствует первым 256 кодовым позициям Unicode, и только они принимаются кодеками при кодировании.910911#### `PyObject *PyUnicode_DecodeLatin1(const char *str, Py_ssize_t size, const char *errors)`912913*Возвращаемое значение: новая ссылка.*914915*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*916917Создаёт объект Unicode путём декодирования *size* байтов строки *str*, закодированной в Latin-1. Возвращает `NULL`, если кодек выбросил исключение.918919#### `PyObject *PyUnicode_AsLatin1String(PyObject *unicode)`920921*Возвращаемое значение: новая ссылка.*922923*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*924925Кодирует объект Unicode с помощью Latin-1 и возвращает результат в виде объекта bytes Python. Обработка ошибок – «strict». Возвращает `NULL`, если кодек выбросил исключение.926927### Кодеки ASCII928929Это API кодеков ASCII. Принимаются только 7-битные данные ASCII. Все остальные коды вызывают ошибки.930931#### `PyObject *PyUnicode_DecodeASCII(const char *str, Py_ssize_t size, const char *errors)`932933*Возвращаемое значение: новая ссылка.*934935*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*936937Создаёт объект Unicode путём декодирования *size* байтов строки *str*, закодированной в ASCII. Возвращает `NULL`, если кодек выбросил исключение.938939#### `PyObject *PyUnicode_AsASCIIString(PyObject *unicode)`940941*Возвращаемое значение: новая ссылка.*942943*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*944945Кодирует объект Unicode с помощью ASCII и возвращает результат в виде объекта bytes Python. Обработка ошибок – «strict». Возвращает `NULL`, если кодек выбросил исключение.946947### Кодеки с таблицей символов948949Этот кодек особенный тем, что его можно использовать для реализации множества различных кодеков (именно так и были получены большинство стандартных кодеков, входящих в пакет `encodings`). Кодек использует отображения для кодирования и декодирования символов. Предоставляемые объекты отображения должны поддерживать интерфейс отображения [`__getitem__()`](https://python-all.ru/3.11/reference/datamodel.html#object.__getitem__); словари и последовательности прекрасно работают.950951Это API кодеков отображения:952953#### `PyObject *PyUnicode_DecodeCharmap(const char *str, Py_ssize_t length, PyObject *mapping, const char *errors)`954955*Возвращаемое значение: новая ссылка.*956957*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*958959Создаёт объект Unicode путём декодирования *size* байтов закодированной строки *str* с использованием заданного объекта *mapping*. Возвращает `NULL`, если кодек выбросил исключение.960961Если *mapping* равен `NULL`, будет применяться декодирование Latin-1. В противном случае *mapping* должен отображать порядковые номера байтов (целые числа в диапазоне от 0 до 255) в строки Unicode, целые числа (которые затем интерпретируются как кодовые позиции Unicode) или `None`. Неотображённые байты данных – те, которые вызывают [`LookupError`](https://python-all.ru/3.11/library/exceptions.html#LookupError), а также те, которые отображаются в `None`, `0xFFFE` или `'\ufffe'`, считаются неопределёнными отображениями и вызывают ошибку.962963#### `PyObject *PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping)`964965*Возвращаемое значение: новая ссылка.*966967*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*968969Кодирует объект Unicode с использованием заданного объекта *mapping* и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает `NULL`, если кодек выбросил исключение.970971Объект *mapping* должен отображать целые числа – кодовые позиции Unicode – в объекты bytes, целые числа в диапазоне от 0 до 255 или `None`. Неотображённые кодовые позиции символов (те, которые вызывают [`LookupError`](https://python-all.ru/3.11/library/exceptions.html#LookupError)), а также отображённые в `None` считаются «неопределённым отображением» и вызывают ошибку.972973Следующее API кодека особенное тем, что отображает Unicode в Unicode.974975#### `PyObject *PyUnicode_Translate(PyObject *unicode, PyObject *table, const char *errors)`976977*Возвращаемое значение: новая ссылка.*978979*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*980981Преобразует строку, применяя к ней таблицу отображения символов, и возвращает результирующий объект Unicode. Возвращает `NULL`, если кодек выбросил исключение.982983Таблица отображения должна отображать целые числа – кодовые позиции Unicode – в целые числа – кодовые позиции Unicode – или в `None` (вызывает удаление символа).984985Таблицы отображения должны лишь предоставлять интерфейс [`__getitem__()`](https://python-all.ru/3.11/reference/datamodel.html#object.__getitem__); словари и последовательности работают хорошо. Неотображённые кодовые позиции символов (те, которые вызывают [`LookupError`](https://python-all.ru/3.11/library/exceptions.html#LookupError)) остаются нетронутыми и копируются как есть.986987*errors* имеет обычное для кодеков значение. Он может быть `NULL`, что означает использование обработки ошибок по умолчанию.988989### Кодеки MBCS для Windows990991Это API кодеков MBCS. В настоящее время они доступны только в Windows и используют преобразователи Win32 MBCS для выполнения преобразований. Обратите внимание, что MBCS (или DBCS) – это класс кодировок, а не одна конкретная. Целевая кодировка определяется пользовательскими настройками на машине, где выполняется кодек.992993#### `PyObject *PyUnicode_DecodeMBCS(const char *str, Py_ssize_t size, const char *errors)`994995*Возвращаемое значение: новая ссылка.*996997*Часть [стабильного ABI](https://python-all.ru/3.11/c-api/stable.html#stable) на Windows с версии 3.7.*998999Создаёт объект Unicode путём декодирования *size* байтов строки *str*, закодированной в MBCS. Возвращает `NULL`, если кодек выбросил исключение.10001001#### `PyObject *PyUnicode_DecodeMBCSStateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)`10021003*Возвращаемое значение: новая ссылка.*10041005*Часть [стабильного ABI](https://python-all.ru/3.11/c-api/stable.html#stable) на Windows с версии 3.7.*10061007Если *consumed* равно `NULL`, поведение аналогично [`PyUnicode_DecodeMBCS()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeMBCS). Если *consumed* не равно `NULL`, [`PyUnicode_DecodeMBCSStateful()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_DecodeMBCSStateful) не будет декодировать конечный ведущий байт, а количество декодированных байт будет сохранено в *consumed*.10081009#### `PyObject *PyUnicode_AsMBCSString(PyObject *unicode)`10101011*Возвращаемое значение: новая ссылка.*10121013*Часть [стабильного ABI](https://python-all.ru/3.11/c-api/stable.html#stable) на Windows с версии 3.7.*10141015Кодирует объект Unicode с помощью MBCS и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает `NULL`, если кодек вызвал исключение.10161017#### `PyObject *PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, const char *errors)`10181019*Возвращаемое значение: новая ссылка.*10201021*Часть [стабильного ABI](https://python-all.ru/3.11/c-api/stable.html#stable) на Windows с версии 3.7.*10221023Кодирует объект Unicode с помощью указанной кодовой страницы и возвращает объект bytes. Возвращает `NULL`, если кодек вызвал исключение. Используйте кодовую страницу `CP_ACP` для получения кодировщика MBCS.10241025Новое в версии 3.3.10261027### Методы и слоты10281029## Методы и слот-функции10301031Следующие API могут обрабатывать объекты Unicode и строки на входе (в описаниях мы называем их строками) и возвращают объекты Unicode или целые числа по необходимости.10321033Все они возвращают `NULL` или `-1` в случае возникновения исключения.10341035#### `PyObject *PyUnicode_Concat(PyObject *left, PyObject *right)`10361037*Возвращаемое значение: новая ссылка.*10381039*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10401041Объединяет две строки, возвращая новую строку Unicode.10421043#### `PyObject *PyUnicode_Split(PyObject *unicode, PyObject *sep, Py_ssize_t maxsplit)`10441045*Возвращаемое значение: новая ссылка.*10461047*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10481049Разделяет строку, возвращая список строк Unicode. Если *sep* равно `NULL`, разделение происходит по всем пробельным подстрокам. В противном случае разделение происходит по указанному разделителю. Будет выполнено не более *maxsplit* разбиений. Если значение отрицательное, ограничение не задано. Разделители не включаются в результирующий список.10501051#### `PyObject *PyUnicode_Splitlines(PyObject *unicode, int keepends)`10521053*Возвращаемое значение: новая ссылка.*10541055*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10561057Разделяет строку Unicode по символам конца строки, возвращая список строк Unicode. CRLF считается одним разрывом строки. Если *keepends* равно `0`, символы конца строки не включаются в результирующие строки.10581059#### `PyObject *PyUnicode_Join(PyObject *separator, PyObject *seq)`10601061*Возвращаемое значение: новая ссылка.*10621063*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10641065Объединяет последовательность строк, используя заданный *разделитель*, и возвращает полученную Unicode-строку.10661067#### `Py_ssize_t PyUnicode_Tailmatch(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)`10681069*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10701071Возвращает `1`, если *substr* совпадает с `unicode[start:end]` на заданном хвосте (*direction* == `-1` означает проверку на совпадение с началом, *direction* == `1` – с концом), иначе `0`. Возвращает `-1`, если произошла ошибка.10721073#### `Py_ssize_t PyUnicode_Find(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)`10741075*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10761077Возвращает первую позицию *substr* в `unicode[start:end]`, используя заданное *direction* (*direction* == `1` означает прямой поиск, *direction* == `-1` – обратный). Возвращаемое значение – индекс первого совпадения; значение `-1` означает, что совпадений не найдено, а `-2` – что произошла ошибка и было установлено исключение.10781079#### `Py_ssize_t PyUnicode_FindChar(PyObject *unicode, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int direction)`10801081*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable) начиная с версии 3.7.*10821083Возвращает первую позицию символа *ch* в `unicode[start:end]`, используя заданное *direction* (*direction* == `1` означает прямой поиск, *direction* == `-1` – обратный). Возвращаемое значение – индекс первого совпадения; значение `-1` означает, что совпадений не найдено, а `-2` – что произошла ошибка и было установлено исключение.10841085Новое в версии 3.3.10861087Изменено в версии 3.7: *start* и *end* теперь скорректированы, чтобы вести себя как `unicode[start:end]`.10881089#### `Py_ssize_t PyUnicode_Count(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end)`10901091*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*10921093Возвращает количество неперекрывающихся вхождений *substr* в `unicode[start:end]`. Возвращает `-1`, если произошла ошибка.10941095#### `PyObject *PyUnicode_Replace(PyObject *unicode, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)`10961097*Возвращаемое значение: новая ссылка.*10981099*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11001101Заменяет не более *maxcount* вхождений *substr* в *unicode* на *replstr* и возвращает полученный Unicode-объект. *maxcount* == `-1` означает заменить все вхождения.11021103#### `int PyUnicode_Compare(PyObject *left, PyObject *right)`11041105*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11061107Сравнивает две строки и возвращает `-1`, `0`, `1` для случаев меньше, равно и больше соответственно.11081109Эта функция возвращает `-1` при ошибке, поэтому для проверки на ошибки следует вызывать [`PyErr_Occurred()`](https://python-all.ru/3.11/c-api/exceptions.html#c.PyErr_Occurred).11101111#### `int PyUnicode_CompareWithASCIIString(PyObject *unicode, const char *string)`11121113*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11141115Сравнивает Unicode-объект *unicode* со строкой *string* и возвращает `-1`, `0`, `1` для случаев меньше, равно и больше соответственно. Рекомендуется передавать только ASCII-строки, но функция интерпретирует входную строку как ISO-8859-1, если она содержит не-ASCII символы.11161117Эта функция не вызывает исключений.11181119#### `PyObject *PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)`11201121*Возвращаемое значение: новая ссылка.*11221123*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11241125Сравнивает две строки Unicode и возвращает одно из следующих значений:11261127- `NULL` в случае, если возникло исключение1128- [`Py_True`](https://python-all.ru/3.11/c-api/bool.html#c.Py_True) или [`Py_False`](https://python-all.ru/3.11/c-api/bool.html#c.Py_False) для успешных сравнений1129- [`Py_NotImplemented`](https://python-all.ru/3.11/c-api/object.html#c.Py_NotImplemented) в случае, если комбинация типов неизвестна11301131Возможные значения для *op*: [`Py_GT`](https://python-all.ru/3.11/c-api/typeobj.html#c.Py_GT), [`Py_GE`](https://python-all.ru/3.11/c-api/typeobj.html#c.Py_GE), [`Py_EQ`](https://python-all.ru/3.11/c-api/typeobj.html#c.Py_EQ), [`Py_NE`](https://python-all.ru/3.11/c-api/typeobj.html#c.Py_NE), [`Py_LT`](https://python-all.ru/3.11/c-api/typeobj.html#c.Py_LT) и [`Py_LE`](https://python-all.ru/3.11/c-api/typeobj.html#c.Py_LE).11321133#### `PyObject *PyUnicode_Format(PyObject *format, PyObject *args)`11341135*Возвращаемое значение: новая ссылка.*11361137*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11381139Возвращает новый строковый объект из *format* и *args*; это аналог `format % args`.11401141#### `int PyUnicode_Contains(PyObject *unicode, PyObject *substr)`11421143*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11441145Проверяет, содержится ли *substr* в *unicode*, и возвращает true или false соответственно.11461147*substr* должен приводиться к строке Unicode из одного элемента. `-1` возвращается в случае ошибки.11481149#### `void PyUnicode_InternInPlace(PyObject **p_unicode)`11501151*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11521153Интернирует аргумент \*[p\_unicode](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_InternInPlace) на месте. Аргумент должен быть адресом переменной-указателя, указывающей на объект строки Python Unicode. Если уже существует интернированная строка, совпадающая с \*[p\_unicode](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_InternInPlace), она устанавливает \*[p\_unicode](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_InternInPlace) в неё (освобождая ссылку на старый строковый объект и создавая новую [сильную ссылку](https://python-all.ru/3.11/glossary.html#term-strong-reference) на интернированный строковый объект), в противном случае она оставляет \*[p\_unicode](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_InternInPlace) нетронутым и интернирует его (создавая новую [сильную ссылку](https://python-all.ru/3.11/glossary.html#term-strong-reference)). (Пояснение: хотя здесь много говорится о ссылках, считайте эту функцию нейтральной по отношению к ссылкам; вы владеете объектом после вызова, только если владели им до вызова.)11541155#### `PyObject *PyUnicode_InternFromString(const char *str)`11561157*Возвращаемое значение: новая ссылка.*11581159*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*11601161Комбинация [`PyUnicode_FromString()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_FromString) и [`PyUnicode_InternInPlace()`](https://python-all.ru/3.11/c-api/unicode.html#c.PyUnicode_InternInPlace), возвращающая либо новый интернированный объект строки Unicode, либо новую («собственную») ссылку на ранее интернированный объект строки с тем же значением.1162