Содержание страницы
Объекты Unicode и кодеки¶Unicode Objects and Codecs
Объекты Unicode¶Unicode Objects
Начиная с реализации PEP 393 в Python 3.3, объекты Unicode внутри используют различные представления, чтобы обеспечить обработку полного диапазона символов Unicode, оставаясь при этом эффективными по памяти. Существуют особые случаи для строк, где все кодовые точки находятся ниже 128, 256 или 65536; в противном случае кодовые точки должны быть ниже 1114112 (то есть полного диапазона Unicode).
Представления Py_UNICODE* и UTF-8 создаются по требованию и кэшируются
в объекте Unicode. Представление Py_UNICODE* устарело
и неэффективно.
Из-за перехода между старыми и новыми API объекты Unicode могут внутренне находиться в двух состояниях в зависимости от того, как они были созданы:
«канонические» объекты Unicode – это все объекты, созданные не устаревшим Unicode API. Они используют наиболее эффективное представление, допускаемое реализацией.
«Унаследованные» объекты Unicode создаются через один из устаревших API (обычно
PyUnicode_FromUnicode()) и содержат только представлениеPy_UNICODE*; перед вызовом любого другого API необходимо вызватьPyUnicode_READY().
Примечание
«Унаследованный» объект Unicode будет удалён в Python 3.12 вместе с устаревшими API. Все объекты Unicode станут «каноническими» с этого момента. Подробнее см. PEP 623.
Тип Unicode¶Unicode Type
Это основные типы объектов Unicode, используемые в реализации Unicode в Python:
-
type
Py_UCS4¶ -
type
Py_UCS2¶ -
type
Py_UCS1¶ - Часть Stable ABI.
Эти типы являются псевдонимами для беззнаковых целочисленных типов, достаточно широких для хранения символов размером 32, 16 и 8 бит соответственно. При работе с отдельными символами Unicode используйте
Py_UCS4.Новое в версии 3.3.
-
type
Py_UNICODE¶ Это typedef для
wchar_t, 16-битный или 32-битный тип в зависимости от платформы.Изменено в версии 3.3: В предыдущих версиях это был 16-битный или 32-битный тип в зависимости от того, была ли выбрана «узкая» или «широкая» версия Unicode Python при сборке.
-
type
PyASCIIObject¶ -
type
PyCompactUnicodeObject¶ -
type
PyUnicodeObject¶ Эти подтипы
PyObjectпредставляют объект Unicode в Python. В почти всех случаях их не следует использовать напрямую, так как все функции API, работающие с объектами Unicode, принимают и возвращают указателиPyObject.Новое в версии 3.3.
-
PyTypeObject
PyUnicode_Type¶ - Часть Stable ABI.
Этот экземпляр
PyTypeObjectпредставляет тип Unicode в Python. Он доступен коду Python какstr.
Следующие API на самом деле являются макросами C и могут использоваться для быстрых проверок и доступа к внутренним данным Unicode объектов только для чтения:
-
int
PyUnicode_Check(PyObject *o)¶ Возвращает true, если объект o является объектом Unicode или экземпляром подтипа Unicode. Эта функция всегда выполняется успешно.
-
int
PyUnicode_CheckExact(PyObject *o)¶ Возвращает true, если объект o является объектом Unicode, но не экземпляром подтипа. Эта функция всегда выполняется успешно.
-
int
PyUnicode_READY(PyObject *o)¶ Убедитесь, что строковый объект o находится в «каноническом» представлении. Это необходимо перед использованием любых макросов доступа, описанных ниже.
Возвращает
0при успехе и-1с установленным исключением при неудаче, что в частности происходит при неудаче выделения памяти.Новое в версии 3.3.
Устарело с версии 3.10, будет удалено в версии 3.12: Этот API будет удалён вместе с
PyUnicode_FromUnicode().
-
Py_ssize_t
PyUnicode_GET_LENGTH(PyObject *o)¶ Возвращает длину строки Unicode в кодовых точках. o должен быть объектом Unicode в «каноническом» представлении (не проверяется).
Новое в версии 3.3.
-
Py_UCS1 *
PyUnicode_1BYTE_DATA(PyObject *o)¶ -
Py_UCS2 *
PyUnicode_2BYTE_DATA(PyObject *o)¶ -
Py_UCS4 *
PyUnicode_4BYTE_DATA(PyObject *o)¶ Возвращает указатель на каноническое представление, приведённое к целочисленным типам UCS1, UCS2 или UCS4 для прямого доступа к символам. Не выполняется проверок, имеет ли каноническое представление правильный размер символа; используйте
PyUnicode_KIND()для выбора правильного макроса. Убедитесь, чтоPyUnicode_READY()был вызван перед доступом к этому.Новое в версии 3.3.
-
PyUnicode_WCHAR_KIND¶ -
PyUnicode_1BYTE_KIND¶ -
PyUnicode_2BYTE_KIND¶ -
PyUnicode_4BYTE_KIND¶ Возвращает значения макроса
PyUnicode_KIND().Новое в версии 3.3.
Устарело с версии 3.10, будет удалено в версии 3.12:
PyUnicode_WCHAR_KINDустарел.
-
unsigned int
PyUnicode_KIND(PyObject *o)¶ Возвращает одну из констант PyUnicode kind (см. выше), которые показывают, сколько байт на символ использует этот объект Unicode для хранения данных. o должен быть объектом Unicode в «каноническом» представлении (не проверяется).
Новое в версии 3.3.
-
void *
PyUnicode_DATA(PyObject *o)¶ Возвращает указатель void на необработанный буфер Unicode. o должен быть объектом Unicode в «каноническом» представлении (не проверяется).
Новое в версии 3.3.
-
void
PyUnicode_WRITE(int kind, void *data, Py_ssize_t index, Py_UCS4 value)¶ Записывает в каноническое представление data (полученное с помощью
PyUnicode_DATA()). Этот макрос не выполняет никаких проверок корректности и предназначен для использования в циклах. Вызывающий код должен кэшировать значение kind и указатель data, полученные из других вызовов макросов. index – это индекс в строке (начиная с 0), а value – новое значение кодовой точки, которое должно быть записано в эту позицию.Новое в версии 3.3.
-
Py_UCS4
PyUnicode_READ(int kind, void *data, Py_ssize_t index)¶ Читает кодовую точку из канонического представления data (полученного с помощью
PyUnicode_DATA()). Никаких проверок или вызовов готовности не выполняется.Новое в версии 3.3.
-
Py_UCS4
PyUnicode_READ_CHAR(PyObject *o, Py_ssize_t index)¶ Читает символ из объекта Unicode o, который должен находиться в «каноническом» представлении. Это менее эффективно, чем
PyUnicode_READ()при многократных последовательных чтениях.Новое в версии 3.3.
-
PyUnicode_MAX_CHAR_VALUE(o)¶ Возвращает максимальную кодовую точку, подходящую для создания другой строки на основе o, который должен быть в «каноническом» представлении. Это всегда приблизительное значение, но более эффективно, чем итерация по строке.
Новое в версии 3.3.
-
Py_ssize_t
PyUnicode_GET_SIZE(PyObject *o)¶ Возвращает размер устаревшего представления
Py_UNICODEв кодовых единицах (суррогатные пары считаются за 2 единицы). o должен быть объектом Unicode (не проверяется).Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование
PyUnicode_GET_LENGTH().
-
Py_ssize_t
PyUnicode_GET_DATA_SIZE(PyObject *o)¶ Возвращает размер устаревшего представления
Py_UNICODEв байтах. o должен быть объектом Unicode (не проверяется).Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование
PyUnicode_GET_LENGTH().
-
Py_UNICODE *
PyUnicode_AS_UNICODE(PyObject *o)¶ -
const char *
PyUnicode_AS_DATA(PyObject *o)¶ Возвращает указатель на представление
Py_UNICODEобъекта. Возвращаемый буфер всегда завершается дополнительной нулевой кодовой точкой. Он также может содержать встроенные нулевые кодовые точки, что приведет к усечению строки при использовании в большинстве функций C. ФормаAS_DATAприводит указатель кconst char*. Аргумент o должен быть объектом Unicode (не проверяется).Изменено в версии 3.3: Этот макрос теперь неэффективен, так как во многих случаях представление
Py_UNICODEне существует и его необходимо создавать, а также может завершиться ошибкой (возвращатьNULLс установленным исключением). Попробуйте переписать код с использованием новых макросовPyUnicode_nBYTE_DATA()или используйтеPyUnicode_WRITE()илиPyUnicode_READ().Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование семейства макросов
PyUnicode_nBYTE_DATA().
-
int
PyUnicode_IsIdentifier(PyObject *o)¶ - Часть Stable ABI.
Возвращает
1, если строка является допустимым идентификатором в соответствии с определением языка, раздел Идентификаторы и ключевые слова. В противном случае возвращает0.Изменено в версии 3.9: Функция больше не вызывает
Py_FatalError(), если строка не готова.
Свойства символов Unicode¶Unicode Character Properties
Unicode предоставляет множество различных свойств символов. Наиболее востребованные из них доступны через следующие макросы, которые сопоставляются с функциями на C в зависимости от конфигурации Python.
-
int
Py_UNICODE_ISSPACE(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch пробельным символом.
-
int
Py_UNICODE_ISLOWER(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом в нижнем регистре.
-
int
Py_UNICODE_ISUPPER(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом в верхнем регистре.
-
int
Py_UNICODE_ISTITLE(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом в регистре заголовка (titlecase).
-
int
Py_UNICODE_ISLINEBREAK(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом разрыва строки.
-
int
Py_UNICODE_ISDECIMAL(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch десятичным символом.
-
int
Py_UNICODE_ISDIGIT(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch цифровым символом.
-
int
Py_UNICODE_ISNUMERIC(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch числовым символом.
-
int
Py_UNICODE_ISALPHA(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch буквенным символом.
-
int
Py_UNICODE_ISALNUM(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch буквенно-цифровым символом.
-
int
Py_UNICODE_ISPRINTABLE(Py_UCS4 ch)¶ Возвращает
1или0в зависимости от того, является ли ch печатным символом. Непечатные символы – это те, которые определены в базе данных Unicode как «Other» или «Separator», за исключением пробела ASCII (0x20), который считается печатным. (Обратите внимание, что печатные символы в этом контексте – это те, которые не должны экранироваться при вызовеrepr()для строки. Это не влияет на обработку строк, записываемых вsys.stdoutилиsys.stderr.)
Эти API можно использовать для быстрых прямых преобразований символов:
-
Py_UCS4
Py_UNICODE_TOLOWER(Py_UCS4 ch)¶ Возвращает символ ch, преобразованный в нижний регистр.
Устарело с версии 3.3: Эта функция использует простые отображения регистра.
-
Py_UCS4
Py_UNICODE_TOUPPER(Py_UCS4 ch)¶ Возвращает символ ch, преобразованный в верхний регистр.
Устарело с версии 3.3: Эта функция использует простые отображения регистра.
-
Py_UCS4
Py_UNICODE_TOTITLE(Py_UCS4 ch)¶ Возвращает символ ch, приведённый к регистру заголовка.
Устарело с версии 3.3: Эта функция использует простые отображения регистра.
-
int
Py_UNICODE_TODECIMAL(Py_UCS4 ch)¶ Возвращает символ ch, преобразованный в десятичное положительное целое. Возвращает
-1, если это невозможно. Этот макрос не вызывает исключений.
-
int
Py_UNICODE_TODIGIT(Py_UCS4 ch)¶ Возвращает символ ch, преобразованный в целое однозначное число. Возвращает
-1, если это невозможно. Этот макрос не вызывает исключений.
-
double
Py_UNICODE_TONUMERIC(Py_UCS4 ch)¶ Возвращает символ ch, преобразованный в double. Возвращает
-1.0, если это невозможно. Этот макрос не вызывает исключений.
Эти API можно использовать для работы с суррогатами:
-
Py_UNICODE_IS_SURROGATE(ch)¶ Проверяет, является ли ch суррогатом (
0xD800 <= ch <= 0xDFFF).
-
Py_UNICODE_IS_HIGH_SURROGATE(ch)¶ Проверяет, является ли ch старшим суррогатом (
0xD800 <= ch <= 0xDBFF).
-
Py_UNICODE_IS_LOW_SURROGATE(ch)¶ Проверяет, является ли ch младшим суррогатом (
0xDC00 <= ch <= 0xDFFF).
-
Py_UNICODE_JOIN_SURROGATES(high, low)¶ Объединяет два суррогатных символа и возвращает одно значение Py_UCS4. high и low – это соответственно старший и младший суррогаты в суррогатной паре.
Создание строк Unicode и доступ к ним¶Creating and accessing Unicode strings
Для создания объектов Unicode и доступа к их базовым свойствам последовательности используйте следующие API:
-
PyObject *
PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)¶ - Возвращаемое значение: новая ссылка.
Создаёт новый объект Unicode. maxchar должен быть истинным максимальным кодом, который будет помещён в строку. В качестве приближения его можно округлить до ближайшего значения из последовательности 127, 255, 65535, 1114111.
Это рекомендуемый способ выделения нового объекта Unicode. Объекты, созданные с помощью этой функции, не подлежат изменению размера.
Новое в версии 3.3.
-
PyObject *
PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Создаёт новый объект Unicode с заданным видом (возможные значения:
PyUnicode_1BYTE_KINDи т.д., возвращаемыеPyUnicode_KIND()). Буфер должен указывать на массив из size единиц по 1, 2 или 4 байта на символ, в зависимости от вида.Новое в версии 3.3.
-
PyObject *
PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode из буфера символов u. Байты будут интерпретироваться как закодированные в UTF-8. Буфер копируется в новый объект. Если буфер не равен
NULL, возвращаемое значение может быть разделяемым объектом, т.е. изменение данных не допускается.Если u равен
NULL, эта функция ведёт себя какPyUnicode_FromUnicode()с буфером, установленным вNULL. Такое использование устарело в пользуPyUnicode_New()и будет удалено в Python 3.12.
-
PyObject *
PyUnicode_FromString(const char *u)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode из UTF-8-закодированного нуль-терминированного буфера символов u.
-
PyObject *
PyUnicode_FromFormat(const char *format, ...)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Принимает строку формата в стиле C
printf()format и переменное число аргументов, вычисляет размер результирующей строки Python Unicode и возвращает строку со вставленными отформатированными значениями. Переменные аргументы должны быть типами C и должны точно соответствовать символам формата в строке format, закодированной в ASCII. Допускаются следующие символы формата:Символы формата
Тип
Описание
%%н/д
Буквальный символ %.
%cint
Один символ, представленный как C int.
%dint
Эквивалентно
printf("%d"). 1%uunsigned int
Эквивалентно
printf("%u"). 1%ldlong
Эквивалентно
printf("%ld"). 1%lilong
Эквивалентно
printf("%li"). 1%luunsigned long
Эквивалентно
printf("%lu"). 1%lldlong long
Эквивалентно
printf("%lld"). 1%llilong long
Эквивалентно
printf("%lli"). 1%lluunsigned long long
Эквивалентно
printf("%llu"). 1%zdЭквивалентно
printf("%zd"). 1%ziЭквивалентно
printf("%zi"). 1%zusize_t
Эквивалентно
printf("%zu"). 1%iint
Эквивалентно
printf("%i"). 1%xint
Эквивалентно
printf("%x"). 1%sconst char*
Нуль-терминированный массив символов C.
%pconst void*
Шестнадцатеричное представление указателя C. В основном эквивалентно
printf("%p"), за исключением того, что гарантированно начинается с литерала0xнезависимо от того, что возвращаетprintfна данной платформе.%APyObject*
Результат вызова
ascii().%UPyObject*
Объект Unicode.
%VPyObject*, const char*
Объект Unicode (который может быть
NULL) и завершающийся нулём символьный массив C в качестве второго параметра (который будет использоваться, если первый параметр равенNULL).%SPyObject*
Результат вызова
PyObject_Str().%RPyObject*
Результат вызова
PyObject_Repr().Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.
Примечание
Единицей форматирования ширины является количество символов, а не байтов. Единицей форматирования точности является количество байтов для
"%s"и"%V"(если аргументPyObject*равенNULL) и количество символов для"%A","%U","%S","%R"и"%V"(если аргументPyObject*не равенNULL).- 1(1,2,3,4,5,6,7,8,9,10,11,12,13)
Для спецификаторов целых чисел (d, u, ld, li, lu, lld, lli, llu, zd, zi, zu, i, x): флаг преобразования 0 действует, даже если задана точность.
Изменено в версии 3.2: Добавлена поддержка
"%lld"и"%llu".Изменено в версии 3.3: Добавлена поддержка
"%li","%lli"и"%zi".Изменено в версии 3.4: Добавлена поддержка форматтеров ширины и точности для
"%s","%A","%U","%V","%S","%R".
-
PyObject *
PyUnicode_FromFormatV(const char *format, va_list vargs)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Идентично
PyUnicode_FromFormat(), за исключением того, что принимает ровно два аргумента.
-
PyObject *
PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Декодирует закодированный объект obj в объект Unicode.
bytes,bytearrayи другие объекты, подобные байтовым строкам декодируются в соответствии с заданной encoding и с использованием обработки ошибок, определённой errors. Оба параметра могут бытьNULL, чтобы интерфейс использовал значения по умолчанию (см. Встроенные кодеки для подробностей).Все остальные объекты, включая объекты Unicode, приводят к установке
TypeError.API возвращает
NULLв случае ошибки. Вызывающий отвечает за уменьшение счётчика ссылок (decref) возвращённых объектов.
-
Py_ssize_t
PyUnicode_GetLength(PyObject *unicode)¶ - Часть Stable ABI начиная с версии 3.7.
Возвращает длину объекта Unicode в кодовых точках.
Новое в версии 3.3.
-
Py_ssize_t
PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start, PyObject *from, Py_ssize_t from_start, Py_ssize_t how_many)¶ Копирует символы из одного объекта Unicode в другой. При необходимости выполняет преобразование символов и, если возможно, использует
memcpy(). Возвращает-1и устанавливает исключение при ошибке, в противном случае возвращает количество скопированных символов.Новое в версии 3.3.
-
Py_ssize_t
PyUnicode_Fill(PyObject *unicode, Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char)¶ Заполняет строку символом: записывает fill_char в
unicode[start:start+length].Завершается ошибкой, если fill_char больше максимального символа строки или если у строки больше одной ссылки.
Возвращает количество записанных символов или
-1и возбуждает исключение при ошибке.Новое в версии 3.3.
-
int
PyUnicode_WriteChar(PyObject *unicode, Py_ssize_t index, Py_UCS4 character)¶ - Часть Stable ABI начиная с версии 3.7.
Записывает символ в строку. Строка должна быть создана с помощью
PyUnicode_New(). Поскольку строки Unicode считаются неизменяемыми, строка не должна быть общей или уже хэшированной.Эта функция проверяет, что unicode является объектом Unicode, индекс не выходит за границы, и объект можно безопасно изменять (т.е. его счётчик ссылок равен единице).
Новое в версии 3.3.
-
Py_UCS4
PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index)¶ - Часть Stable ABI начиная с версии 3.7.
Читает символ из строки. Эта функция проверяет, что unicode является объектом Unicode и индекс не выходит за границы, в отличие от макроса
PyUnicode_READ_CHAR().Новое в версии 3.3.
-
PyObject *
PyUnicode_Substring(PyObject *str, Py_ssize_t start, Py_ssize_t end)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.7.
Возвращает подстроку str от индекса символа start (включительно) до индекса символа end (исключительно). Отрицательные индексы не поддерживаются.
Новое в версии 3.3.
-
Py_UCS4 *
PyUnicode_AsUCS4(PyObject *u, Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null)¶ - Часть Stable ABI начиная с версии 3.7.
Копирует строку u в буфер UCS4, включая нулевой символ, если copy_null установлен. Возвращает
NULLи устанавливает исключение при ошибке (в частности,SystemError, если buflen меньше длины u). В случае успеха возвращается buffer.Новое в версии 3.3.
-
Py_UCS4 *
PyUnicode_AsUCS4Copy(PyObject *u)¶ - Часть Stable ABI начиная с версии 3.7.
Копирует строку u в новый буфер UCS4, выделяемый с помощью
PyMem_Malloc(). Если это не удаётся, возвращаетсяNULLс установленнымMemoryError. Возвращаемый буфер всегда содержит дополнительный нулевой кодовый элемент.Новое в версии 3.3.
Устаревшие API Py_UNICODE¶Deprecated Py_UNICODE APIs
Устарело с версии 3.3, будет удалено в версии 3.12.
Эти функции API устарели с реализацией PEP 393. Модули-расширения могут продолжать их использовать, поскольку они не будут удалены в Python 3.x, но следует учитывать, что их использование теперь может приводить к снижению производительности и увеличению потребления памяти.
-
PyObject *
PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode из буфера Py_UNICODE u заданного размера. u может быть
NULL, что делает содержимое неопределённым. Пользователь отвечает за заполнение необходимых данных. Буфер копируется в новый объект.Если буфер не равен
NULL, возвращаемое значение может быть разделяемым объектом. Поэтому изменение полученного объекта Unicode разрешено только тогда, когда u равенNULL.Если буфер равен
NULL,PyUnicode_READY()должен быть вызван после заполнения содержимого строки, перед использованием любых макросов доступа, таких какPyUnicode_KIND().Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, перейдите на использование
PyUnicode_FromKindAndData(),PyUnicode_FromWideChar()илиPyUnicode_New().
-
Py_UNICODE *
PyUnicode_AsUnicode(PyObject *unicode)¶ Возвращает указатель только для чтения на внутренний
Py_UNICODEбуфер объекта Unicode илиNULLв случае ошибки. При этом создаётсяPy_UNICODE*представление объекта, если оно ещё не доступно. Буфер всегда завершается дополнительным нулевым кодовым элементом. Обратите внимание, что результирующая строкаPy_UNICODEможет также содержать встроенные нулевые кодовые элементы, что приведёт к усечению строки при использовании в большинстве функций C.Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, перейдите на использование
PyUnicode_AsUCS4(),PyUnicode_AsWideChar(),PyUnicode_ReadChar()или аналогичных новых API.
-
PyObject *
PyUnicode_TransformDecimalToASCII(Py_UNICODE *s, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode, заменяя все десятичные цифры в буфере
Py_UNICODEуказанного размера size на цифры ASCII 0–9 в соответствии с их десятичным значением. ВозвращаетNULLв случае возникновения исключения.Устарело с версии 3.3, будет удалено в версии 3.11: Часть устаревшего API
Py_UNICODE; переходите на использованиеPy_UNICODE_TODECIMAL().
-
Py_UNICODE *
PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)¶ Как и
PyUnicode_AsUnicode(), но также сохраняет длину массиваPy_UNICODE()(исключая дополнительный нулевой терминатор) в size. Обратите внимание, что результирующая строкаPy_UNICODE*может содержать встроенные нулевые кодовые элементы, что приведёт к усечению строки при использовании в большинстве функций C.Новое в версии 3.3.
Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого стиля Unicode API, перейдите на использование
PyUnicode_AsUCS4(),PyUnicode_AsWideChar(),PyUnicode_ReadChar()или аналогичных новых API.
-
Py_ssize_t
PyUnicode_GetSize(PyObject *unicode)¶ - Часть Stable ABI.
Возвращает размер устаревшего представления
Py_UNICODE, в кодовых единицах (суррогатные пары учитываются как 2 единицы).Устарело с версии 3.3, будет удалено в версии 3.12: Часть старого API Unicode, переходите на использование
PyUnicode_GET_LENGTH().
-
PyObject *
PyUnicode_FromObject(PyObject *obj)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Копирует экземпляр подтипа Unicode в новый истинный объект Unicode, если это необходимо. Если obj уже является истинным объектом Unicode (не подтипом), возвращает ссылку с увеличенным счётчиком ссылок.
Объекты, отличные от Unicode или его подтипов, вызывают
TypeError.
Кодировка локали¶Locale Encoding
Текущую кодировку локали можно использовать для декодирования текста из операционной системы.
-
PyObject *
PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t len, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.7.
Decode 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). The decoder uses"strict"error handler if errors isNULL. str must end with a null character but cannot contain embedded null characters.Используйте
PyUnicode_DecodeFSDefaultAndSize()для декодирования строки изPy_FileSystemDefaultEncoding(кодировка локали, полученная при запуске Python).Эта функция игнорирует режим UTF-8 Python.
См. также
Функция
Py_DecodeLocale().Новое в версии 3.3.
Изменено в версии 3.7: Теперь функция также использует текущую кодировку локали для обработчика ошибок
surrogateescape, за исключением Android. Ранее дляsurrogateescapeиспользовалсяPy_DecodeLocale(), а дляstrictиспользовалась текущая кодировка локали.
-
PyObject *
PyUnicode_DecodeLocale(const char *str, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.7.
Аналогично
PyUnicode_DecodeLocaleAndSize(), но длина строки вычисляется с помощьюstrlen().Новое в версии 3.3.
-
PyObject *
PyUnicode_EncodeLocale(PyObject *unicode, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.7.
Encode 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). The encoder uses"strict"error handler if errors isNULL. Return abytesobject. unicode cannot contain embedded null characters.Используйте
PyUnicode_EncodeFSDefault()для кодирования строки вPy_FileSystemDefaultEncoding(кодировка локали, полученная при запуске Python).Эта функция игнорирует режим UTF-8 Python.
См. также
Функция
Py_EncodeLocale().Новое в версии 3.3.
Изменено в версии 3.7: Теперь функция также использует текущую кодировку локали для обработчика ошибок
surrogateescape, за исключением Android. Ранее дляsurrogateescapeиспользовалсяPy_EncodeLocale(), а дляstrictиспользовалась текущая кодировка локали.
Кодировка файловой системы¶File System Encoding
Для кодирования и декодирования имён файлов и других строк окружения
в качестве кодировки следует использовать Py_FileSystemDefaultEncoding, а в качестве
обработчика ошибок – Py_FileSystemDefaultEncodeErrors
(PEP 383 и PEP 529). Для кодирования имён файлов в bytes при
разборе аргументов следует использовать преобразователь "O&", передавая
PyUnicode_FSConverter() в качестве функции преобразования:
-
int
PyUnicode_FSConverter(PyObject *obj, void *result)¶ - Часть Stable ABI.
Конвертер ParseTuple: кодирует объекты
str– полученные напрямую или через интерфейсos.PathLike– вbytesс помощьюPyUnicode_EncodeFSDefault(); объектыbytesвыводятся как есть. result должен бытьPyBytesObject*, который необходимо освободить, когда он больше не используется.Новое в версии 3.1.
Изменено в версии 3.6: Принимает объект, подобный пути.
Для декодирования имен файлов в str во время разбора аргументов следует использовать конвертер "O&", передавая PyUnicode_FSDecoder() в качестве функции преобразования:
-
int
PyUnicode_FSDecoder(PyObject *obj, void *result)¶ - Часть Stable ABI.
Конвертер ParseTuple: декодирует объекты
bytes– полученные либо напрямую, либо косвенно через интерфейсos.PathLike– вstrс помощьюPyUnicode_DecodeFSDefaultAndSize(); объектыstrвыводятся как есть. result должен бытьPyUnicodeObject*, который необходимо освободить, когда он больше не используется.Новое в версии 3.2.
Изменено в версии 3.6: Принимает объект, подобный пути.
-
PyObject *
PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Декодирует строку из кодировки файловой системы и обработчика ошибок.
Если
Py_FileSystemDefaultEncodingне задана, используется кодировка локали.Py_FileSystemDefaultEncodingинициализируется при запуске из кодировки локали и не может быть изменена позднее. Если требуется декодировать строку из текущей кодировки локали, используйтеPyUnicode_DecodeLocaleAndSize().См. также
Функция
Py_DecodeLocale().Изменено в версии 3.6: Используйте обработчик ошибок
Py_FileSystemDefaultEncodeErrors.
-
PyObject *
PyUnicode_DecodeFSDefault(const char *s)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Декодирует строку, завершающуюся нулевым символом, из кодировки файловой системы и обработчика ошибок.
Если
Py_FileSystemDefaultEncodingне задана, используется кодировка локали.Используйте
PyUnicode_DecodeFSDefaultAndSize(), если известна длина строки.Изменено в версии 3.6: Используйте обработчик ошибок
Py_FileSystemDefaultEncodeErrors.
-
PyObject *
PyUnicode_EncodeFSDefault(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode в
Py_FileSystemDefaultEncodingс обработчиком ошибокPy_FileSystemDefaultEncodeErrorsи возвращаетbytes. Обратите внимание, что результирующий объектbytesможет содержать нулевые байты.Если
Py_FileSystemDefaultEncodingне задана, используется кодировка локали.Py_FileSystemDefaultEncodingинициализируется при запуске из кодировки локали и не может быть изменена позднее. Если требуется закодировать строку в текущую кодировку локали, используйтеPyUnicode_EncodeLocale().См. также
Функция
Py_EncodeLocale().Новое в версии 3.2.
Изменено в версии 3.6: Используйте обработчик ошибок
Py_FileSystemDefaultEncodeErrors.
Поддержка wchar_t¶wchar_t Support
wchar_t поддержка на платформах, которые её поддерживают:
-
PyObject *
PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode из буфера
wchar_tw указанного размера size. Передача-1в качестве size указывает, что функция должна сама вычислить длину, используя wcslen. ВозвращаетNULLв случае неудачи.
-
Py_ssize_t
PyUnicode_AsWideChar(PyObject *unicode, wchar_t *w, Py_ssize_t size)¶ - Часть Stable ABI.
Копирует содержимое объекта Unicode в буфер
wchar_tw. Копируется не более size символовwchar_t(исключая возможный завершающий нулевой символ). Возвращает количество скопированных символовwchar_tили-1в случае ошибки. Обратите внимание, что результирующая строкаwchar_t*может быть как завершена нулевым символом, так и нет. Вызывающий обязан убедиться, что строкаwchar_t*завершена нулевым символом, если это требуется приложением. Кроме того, строкаwchar_t*может содержать нулевые символы, что приведёт к усечению строки при использовании с большинством функций C.
-
wchar_t *
PyUnicode_AsWideCharString(PyObject *unicode, Py_ssize_t *size)¶ - Часть Stable ABI начиная с версии 3.7.
Преобразует объект Unicode в широкую символьную строку. Выходная строка всегда завершается нулевым символом. Если size не равно
NULL, количество широких символов (исключая завершающий нулевой символ) записывается в *size. Обратите внимание, что результирующая строкаwchar_tможет содержать нулевые символы, что приведёт к усечению строки при использовании с большинством функций C. Если size равноNULLи строкаwchar_t*содержит нулевые символы, возбуждаетсяValueError.В случае успеха возвращает буфер, выделенный функцией
PyMem_Alloc()(для освобождения используйтеPyMem_Free()). При ошибке возвращаетNULL, а *size не определён. ВозбуждаетMemoryError, если выделение памяти не удалось.Новое в версии 3.2.
Изменено в версии 3.7: Возбуждает
ValueError, если size равноNULLи строкаwchar_t*содержит нулевые символы.
Встроенные кодеки¶Built-in Codecs
Python предоставляет набор встроенных кодеков, написанных на C для скорости. Все эти кодеки могут использоваться напрямую через следующие функции.
Многие из следующих API принимают два аргумента: encoding и errors, и их семантика совпадает с семантикой соответствующих аргументов встроенного конструктора строк str().
Установка кодировки в NULL приводит к использованию кодировки по умолчанию,
которая является UTF-8. Системные вызовы файловой системы должны использовать
PyUnicode_FSConverter() для кодирования имён файлов. Для этого внутри используется
переменная Py_FileSystemDefaultEncoding. Эту
переменную следует считать доступной только для чтения: в некоторых системах это будет
указатель на статическую строку, в других – она будет изменяться во время выполнения
(например, когда приложение вызывает setlocale).
Обработка ошибок задаётся параметром errors, который также может быть установлен в NULL, что означает использование обработки по умолчанию, определённой для кодека. По умолчанию для всех встроенных кодеков используется строгий режим (возбуждается ValueError).
Все кодеки используют схожий интерфейс. Для простоты документированы только отличия от приведённого ниже общего описания.
Общие кодеки¶Generic Codecs
Это общие API кодеков:
-
PyObject *
PyUnicode_Decode(const char *s, Py_ssize_t size, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode путём декодирования size байтов закодированной строки s. encoding и errors имеют тот же смысл, что и одноимённые параметры во встроенной функции
str(). Используемый кодек находится с помощью реестра кодеков Python. ВозвращаетNULL, если кодек возбудил исключение.
-
PyObject *
PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode и возвращает результат в виде объекта bytes. Параметры encoding и errors имеют тот же смысл, что и одноимённые параметры метода
encode()объекта Unicode. Используемый кодек ищется с помощью реестра кодеков Python. ВозвращаетNULL, если кодек возбудил исключение.
-
PyObject *
PyUnicode_Encode(const Py_UNICODE *s, Py_ssize_t size, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEs заданного размера и возвращает объект Python bytes. Параметры encoding и errors имеют тот же смысл, что и одноимённые параметры метода Unicodeencode(). Используемый кодек ищется по реестру кодеков Python. ВозвращаетNULL, если кодек выбросил исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsEncodedString().
Кодеки UTF-8¶UTF-8 Codecs
Это API кодеков UTF-8:
-
PyObject *
PyUnicode_DecodeUTF8(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байт строки s в кодировке UTF-8. Возвращает
NULL, если кодек выбросил исключение.
-
PyObject *
PyUnicode_DecodeUTF8Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Если consumed равно
NULL, ведёт себя какPyUnicode_DecodeUTF8(). Если consumed не равноNULL, неполные конечные последовательности байтов UTF-8 не будут считаться ошибкой. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в consumed.
-
PyObject *
PyUnicode_AsUTF8String(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode в UTF-8 и возвращает результат в виде объекта bytes Python. Обработка ошибок – «strict». Возвращает
NULL, если кодек вызвал исключение.
-
const char *
PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)¶ - Часть Stable ABI начиная с версии 3.10.
Возвращает указатель на UTF-8-кодировку объекта Unicode и сохраняет размер закодированного представления (в байтах) в size. Аргумент size может быть
NULL; в этом случае размер не сохраняется. Возвращаемый буфер всегда содержит дополнительный нулевой байт в конце (не включён в size), независимо от наличия других нулевых кодовых точек.В случае ошибки возвращается
NULLс установленным исключением, а size не сохраняется.Это кеширует UTF-8-представление строки в объекте Unicode, и последующие вызовы будут возвращать указатель на тот же буфер. Вызывающий не отвечает за освобождение буфера. Буфер освобождается, а указатели на него становятся недействительными, когда объект Unicode удаляется сборщиком мусора.
Новое в версии 3.3.
Изменено в версии 3.7: Тип возвращаемого значения теперь
const char *вместоchar *.Изменено в версии 3.10: Эта функция является частью ограниченного API.
-
const char *
PyUnicode_AsUTF8(PyObject *unicode)¶ Как
PyUnicode_AsUTF8AndSize(), но не сохраняет размер.Новое в версии 3.3.
Изменено в версии 3.7: Тип возвращаемого значения теперь
const char *вместоchar *.
-
PyObject *
PyUnicode_EncodeUTF8(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEs заданного размера с использованием UTF-8 и возвращает объект Python bytes. ВозвращаетNULL, если кодек выбросил исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsUTF8String(),PyUnicode_AsUTF8AndSize()илиPyUnicode_AsEncodedString().
Кодеки UTF-32¶UTF-32 Codecs
Это API кодеков UTF-32:
-
PyObject *
PyUnicode_DecodeUTF32(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Декодирует size байтов из буферной строки, закодированной в UTF-32, и возвращает соответствующий объект Unicode. errors (если не
NULL) определяет обработку ошибок. По умолчанию – «strict».Если byteorder не равно
NULL, декодер начинает декодирование с указанным порядком байтов:*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
Если
*byteorderравен нулю и первые четыре байта входных данных являются маркером порядка байтов (BOM), декодер переключается на этот порядок байтов, и BOM не копируется в результирующую строку Unicode. Если*byteorderравно-1или1, любой маркер порядка байтов копируется в выходные данные.После завершения *byteorder устанавливается в текущий порядок байтов в конце входных данных.
Если byteorder равен
NULL, кодек запускается в режиме собственного порядка байтов.Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_DecodeUTF32Stateful(const char *s, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Если consumed равно
NULL, ведёт себя какPyUnicode_DecodeUTF32(). Если consumed не равноNULL,PyUnicode_DecodeUTF32Stateful()не будет считать неполные конечные последовательности байтов UTF-32 (например, количество байтов, не делящееся на четыре) ошибкой. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в consumed.
-
PyObject *
PyUnicode_AsUTF32String(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает байтовую строку Python в кодировке UTF-32 в собственном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок – «strict». Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶ - Возвращаемое значение: новая ссылка.
Возвращает объект Python bytes, содержащий значение Unicode-данных из s, закодированное в UTF-32. Вывод записывается в соответствии со следующим порядком байтов:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
Если
0, выходная строка всегда начинается с метки BOM Unicode (U+FEFF). В двух других режимах метка BOM не добавляется.Если
Py_UNICODE_WIDEне определён, суррогатные пары будут выводиться как одна кодовая точка.Возвращает
NULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsUTF32String()илиPyUnicode_AsEncodedString().
Кодеки UTF-32¶UTF-16 Codecs
Это API кодеков UTF-32:
-
PyObject *
PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Декодирует size байтов из строки буфера, закодированной в UTF-16, и возвращает соответствующий объект Unicode. errors (если не
NULL) определяет обработку ошибок. По умолчанию используется «strict».Если byteorder не равно
NULL, декодер начинает декодирование с указанным порядком байтов:*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
Если
*byteorderравен нулю и первые два байта входных данных являются меткой порядка байтов (BOM), декодер переключается на этот порядок байтов, а BOM не копируется в результирующую строку Unicode. Если*byteorderравен-1или1, любая метка порядка байтов копируется в выходные данные (что приведёт к символу\ufeffили\ufffe).После завершения
*byteorderустанавливается в текущий порядок байтов в конце входных данных.Если byteorder равен
NULL, кодек запускается в режиме собственного порядка байтов.Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_DecodeUTF16Stateful(const char *s, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Если consumed равен
NULL, ведёт себя какPyUnicode_DecodeUTF16(). Если consumed не равенNULL,PyUnicode_DecodeUTF16Stateful()не будет рассматривать хвостовые неполные последовательности байтов UTF-16 (например, нечётное количество байтов или разбитую суррогатную пару) как ошибку. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в consumed.
-
PyObject *
PyUnicode_AsUTF16String(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает байтовую строку Python в кодировке UTF-16 в собственном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок – «strict». Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶ - Возвращаемое значение: новая ссылка.
Возвращает объект Python bytes, содержащий значение Unicode-данных из s, закодированное в UTF-16. Вывод записывается в соответствии со следующим порядком байтов:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
Если
0, выходная строка всегда начинается с метки BOM Unicode (U+FEFF). В двух других режимах метка BOM не добавляется.Если
Py_UNICODE_WIDEопределён, одно значениеPy_UNICODEможет быть представлено как суррогатная пара. Если не определён, каждое значениеPy_UNICODEинтерпретируется как символ UCS-2.Возвращает
NULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsUTF16String()илиPyUnicode_AsEncodedString().
Кодеки UTF-7¶UTF-7 Codecs
Это API кодеков UTF-7:
-
PyObject *
PyUnicode_DecodeUTF7(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байт строки s в кодировке UTF-7. Возвращает
NULL, если кодек выбросил исключение.
-
PyObject *
PyUnicode_DecodeUTF7Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Если consumed равен
NULL, ведёт себя какPyUnicode_DecodeUTF7(). Если consumed не равенNULL, хвостовые неполные секции base-64 UTF-7 не будут рассматриваться как ошибка. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в consumed.
-
PyObject *
PyUnicode_EncodeUTF7(const Py_UNICODE *s, Py_ssize_t size, int base64SetO, int base64WhiteSpace, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEуказанного размера с помощью UTF-7 и возвращает объект Python bytes. ВозвращаетNULL, если кодек вызвал исключение.Если base64SetO не равно нулю, «Set O» (знаки препинания, не имеющие иного особого значения) будут закодированы в base-64. Если base64WhiteSpace не равно нулю, пробельные символы будут закодированы в base-64. Оба параметра установлены в ноль для кодека Python «utf-7».
Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsEncodedString().
Кодеки Unicode-Escape¶Unicode-Escape Codecs
Это API кодеков «Unicode Escape»:
-
PyObject *
PyUnicode_DecodeUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байтов строки s, закодированной в Unicode-Escape. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsUnicodeEscapeString(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode с помощью Unicode-Escape и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEуказанного size с помощью Unicode-Escape и возвращает объект bytes. ВозвращаетNULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsUnicodeEscapeString().
Кодеки Raw-Unicode-Escape¶Raw-Unicode-Escape Codecs
Это API кодеков «Raw Unicode Escape»:
-
PyObject *
PyUnicode_DecodeRawUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байтов строки s, закодированной в Raw-Unicode-Escape. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode с помощью Raw-Unicode-Escape и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEуказанного size с помощью Raw-Unicode-Escape и возвращает объект bytes. ВозвращаетNULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsRawUnicodeEscapeString()илиPyUnicode_AsEncodedString().
Кодеки Latin-1¶Latin-1 Codecs
Это API кодеков Latin-1: Latin-1 соответствует первым 256 кодовым позициям Unicode, и только они принимаются кодеками при кодировании.
-
PyObject *
PyUnicode_DecodeLatin1(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байтов строки s, закодированной в Latin-1. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsLatin1String(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode с помощью Latin-1 и возвращает результат в виде объекта bytes Python. Обработка ошибок – «strict». Возвращает
NULL, если кодек выбросил исключение.
-
PyObject *
PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEуказанного size с помощью Latin-1 и возвращает объект Python bytes. ВозвращаетNULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsLatin1String()илиPyUnicode_AsEncodedString().
Кодеки ASCII¶ASCII Codecs
Это API кодеков ASCII. Принимаются только 7-битные данные ASCII. Все остальные коды вызывают ошибки.
-
PyObject *
PyUnicode_DecodeASCII(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байтов строки s, закодированной в ASCII. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsASCIIString(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode с помощью ASCII и возвращает результат в виде объекта bytes Python. Обработка ошибок – «strict». Возвращает
NULL, если кодек выбросил исключение.
-
PyObject *
PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEуказанного size с помощью ASCII и возвращает объект Python bytes. ВозвращаетNULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsASCIIString()илиPyUnicode_AsEncodedString().
Кодеки с таблицей символов¶Character Map Codecs
Этот кодек особенный тем, что его можно использовать для реализации множества различных кодеков (именно так и были получены большинство стандартных кодеков, входящих в пакет encodings). Кодек использует отображения для кодирования и декодирования символов. Предоставляемые объекты отображения должны поддерживать интерфейс отображения __getitem__(); словари и последовательности прекрасно работают.
Это API кодеков отображения:
-
PyObject *
PyUnicode_DecodeCharmap(const char *data, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт объект Unicode, декодируя size байтов закодированной строки s с помощью указанного объекта mapping. Возвращает
NULL, если кодек вызвал исключение.Если mapping равен
NULL, будет применяться декодирование Latin-1. В противном случае mapping должен отображать порядковые номера байтов (целые числа в диапазоне от 0 до 255) в строки Unicode, целые числа (которые затем интерпретируются как кодовые позиции Unicode) илиNone. Неотображённые байты данных – те, которые вызываютLookupError, а также те, которые отображаются вNone,0xFFFEили'\ufffe', считаются неопределёнными отображениями и вызывают ошибку.
-
PyObject *
PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Кодирует объект Unicode с использованием заданного объекта mapping и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает
NULL, если кодек выбросил исключение.Объект mapping должен отображать целые числа – кодовые позиции Unicode – в объекты bytes, целые числа в диапазоне от 0 до 255 или
None. Неотображённые кодовые позиции символов (те, которые вызываютLookupError), а также отображённые вNoneсчитаются «неопределённым отображением» и вызывают ошибку.
-
PyObject *
PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера с помощью заданного объекта mapping и возвращает результат в виде объекта bytes. ВозвращаетNULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsCharmapString()илиPyUnicode_AsEncodedString().
Следующее API кодека особенное тем, что отображает Unicode в Unicode.
-
PyObject *
PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Преобразует строку, применяя к ней таблицу отображения символов, и возвращает результирующий объект Unicode. Возвращает
NULL, если кодек выбросил исключение.Таблица отображения должна отображать целые числа – кодовые позиции Unicode – в целые числа – кодовые позиции Unicode – или в
None(вызывает удаление символа).Таблицы отображения должны лишь предоставлять интерфейс
__getitem__(); словари и последовательности работают хорошо. Неотображённые кодовые позиции символов (те, которые вызываютLookupError) остаются нетронутыми и копируются как есть.errors имеет обычное для кодеков значение. Он может быть
NULL, что означает использование обработки ошибок по умолчанию.
-
PyObject *
PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Преобразует буфер
Py_UNICODEзаданного размера, применяя таблицу mapping символов, и возвращает результирующий объект Unicode. ВозвращаетNULL, когда кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 3.11: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_Translate(). или универсального API на основе кодеков
Кодеки MBCS для Windows¶MBCS codecs for Windows
Это API кодеков MBCS. В настоящее время они доступны только в Windows и используют преобразователи Win32 MBCS для выполнения преобразований. Обратите внимание, что MBCS (или DBCS) – это класс кодировок, а не одна конкретная. Целевая кодировка определяется пользовательскими настройками на машине, где выполняется кодек.
-
PyObject *
PyUnicode_DecodeMBCS(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть стабильного ABI на Windows с версии 3.7.
Создаёт объект Unicode, декодируя size байт строки s, закодированной в MBCS. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_DecodeMBCSStateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка. Часть стабильного ABI на Windows с версии 3.7.
Если consumed равно
NULL, поведение аналогичноPyUnicode_DecodeMBCS(). Если consumed не равноNULL,PyUnicode_DecodeMBCSStateful()не будет декодировать конечный ведущий байт, а количество декодированных байт будет сохранено в consumed.
-
PyObject *
PyUnicode_AsMBCSString(PyObject *unicode)¶ - Возвращаемое значение: новая ссылка. Часть стабильного ABI на Windows с версии 3.7.
Кодирует объект Unicode с помощью MBCS и возвращает результат в виде объекта bytes. Обработка ошибок – «strict». Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, const char *errors)¶ - Возвращаемое значение: новая ссылка. Часть стабильного ABI на Windows с версии 3.7.
Кодирует объект Unicode с помощью указанной кодовой страницы и возвращает объект bytes. Возвращает
NULL, если кодек вызвал исключение. Используйте кодовую страницуCP_ACPдля получения кодировщика MBCS.Новое в версии 3.3.
-
PyObject *
PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера с использованием MBCS и возвращает объект Python bytes. ВозвращаетNULL, если кодек вызвал исключение.Устарело с версии 3.3, будет удалено в версии 4.0: Часть старого API
Py_UNICODE; переходите на использованиеPyUnicode_AsMBCSString(),PyUnicode_EncodeCodePage()илиPyUnicode_AsEncodedString().
Методы и слоты¶Methods & Slots
Методы и слот-функции¶Methods and Slot Functions
Следующие API могут обрабатывать объекты Unicode и строки на входе (в описаниях мы называем их строками) и возвращают объекты Unicode или целые числа по необходимости.
Все они возвращают NULL или -1 в случае возникновения исключения.
-
PyObject *
PyUnicode_Concat(PyObject *left, PyObject *right)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Объединяет две строки, возвращая новую строку Unicode.
-
PyObject *
PyUnicode_Split(PyObject *s, PyObject *sep, Py_ssize_t maxsplit)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Разделяет строку, возвращая список строк Unicode. Если sep равно
NULL, разделение происходит по всем пробельным подстрокам. В противном случае разделение происходит по указанному разделителю. Будет выполнено не более maxsplit разбиений. Если значение отрицательное, ограничение не задано. Разделители не включаются в результирующий список.
-
PyObject *
PyUnicode_Splitlines(PyObject *s, int keepend)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Разделяет строку Unicode по символам перевода строки и возвращает список строк Unicode. Последовательность CRLF считается одним переносом строки. Если keepend равен
0, символы переноса строки не включаются в результирующие строки.
-
PyObject *
PyUnicode_Join(PyObject *separator, PyObject *seq)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Объединяет последовательность строк, используя заданный разделитель, и возвращает полученную Unicode-строку.
-
Py_ssize_t
PyUnicode_Tailmatch(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶ - Часть Stable ABI.
Возвращает
1, если substr совпадает сstr[start:end]на заданном хвосте (direction ==-1означает проверку на совпадение с началом, direction ==1– с концом), иначе0. Возвращает-1, если произошла ошибка.
-
Py_ssize_t
PyUnicode_Find(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶ - Часть Stable ABI.
Возвращает первую позицию substr в
str[start:end], используя заданное direction (direction ==1означает прямой поиск, direction ==-1– обратный). Возвращаемое значение – индекс первого совпадения; значение-1означает, что совпадений не найдено, а-2– что произошла ошибка и было установлено исключение.
-
Py_ssize_t
PyUnicode_FindChar(PyObject *str, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int direction)¶ - Часть Stable ABI начиная с версии 3.7.
Возвращает первую позицию символа ch в
str[start:end], используя заданное direction (direction ==1означает прямой поиск, direction ==-1– обратный). Возвращаемое значение – индекс первого совпадения; значение-1означает, что совпадений не найдено, а-2– что произошла ошибка и было установлено исключение.Новое в версии 3.3.
Изменено в версии 3.7: start и end теперь скорректированы, чтобы вести себя как
str[start:end].
-
Py_ssize_t
PyUnicode_Count(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end)¶ - Часть Stable ABI.
Возвращает количество неперекрывающихся вхождений substr в
str[start:end]. Возвращает-1, если произошла ошибка.
-
PyObject *
PyUnicode_Replace(PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Заменяет не более maxcount вхождений substr в str на replstr и возвращает результирующий объект Unicode. maxcount ==
-1означает замену всех вхождений.
-
int
PyUnicode_Compare(PyObject *left, PyObject *right)¶ - Часть Stable ABI.
Сравнивает две строки и возвращает
-1,0,1для случаев меньше, равно и больше соответственно.Эта функция возвращает
-1при ошибке, поэтому для проверки на ошибки следует вызыватьPyErr_Occurred().
-
int
PyUnicode_CompareWithASCIIString(PyObject *uni, const char *string)¶ - Часть Stable ABI.
Сравнивает объект Unicode uni со строкой string и возвращает
-1,0,1для случаев меньше, равно и больше соответственно. Рекомендуется передавать только строки в кодировке ASCII, но функция интерпретирует входную строку как ISO-8859-1, если она содержит не-ASCII символы.Эта функция не вызывает исключений.
-
PyObject *
PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Сравнивает две строки Unicode и возвращает одно из следующих значений:
NULLв случае, если возникло исключениеPy_TrueилиPy_Falseдля успешных сравненийPy_NotImplementedв случае, если комбинация типов неизвестна
Возможные значения для op:
Py_GT,Py_GE,Py_EQ,Py_NE,Py_LTиPy_LE.
-
PyObject *
PyUnicode_Format(PyObject *format, PyObject *args)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает новый строковый объект из format и args; это аналог
format % args.
-
int
PyUnicode_Contains(PyObject *container, PyObject *element)¶ - Часть Stable ABI.
Проверяет, содержится ли element в container, и возвращает true или false соответственно.
Элемент должен приводиться к одноэлементной строке Unicode.
-1возвращается при возникновении ошибки.
-
void
PyUnicode_InternInPlace(PyObject **string)¶ - Часть Stable ABI.
Интернирует аргумент *string на месте. Аргументом должен быть адрес переменной-указателя, указывающей на объект строки Unicode в Python. Если уже существует интернированная строка, совпадающая с *string, то она заменяет *string на неё (освобождая ссылку на старый строковый объект и создавая новую сильную ссылку на интернированный строковый объект); в противном случае она оставляет *string без изменений и интернирует его (создавая новую сильную ссылку). (Пояснение: хотя много говорится о ссылках, считайте эту функцию нейтральной по отношению к ссылкам; вызывающий код владеет объектом после вызова тогда и только тогда, когда он владел им до вызова.)
-
PyObject *
PyUnicode_InternFromString(const char *v)¶ - Возвращаемое значение: новая ссылка. Часть Stable ABI.
Комбинация
PyUnicode_FromString()иPyUnicode_InternInPlace(), возвращающая либо новый интернированный объект строки Unicode, либо новую («собственную») ссылку на ранее интернированный объект строки с тем же значением.