Объекты и кодеки Unicode
Объекты Unicode
Начиная с реализации PEP 393 в Python 3.3, объекты Unicode используют различные внутренние представления, чтобы обрабатывать весь диапазон символов Unicode, сохраняя при этом эффективность использования памяти. Существуют специальные случаи для строк, где все кодовые точки находятся ниже 128, 256 или 65536; в противном случае кодовые точки должны быть ниже 1114112 (что соответствует полному диапазону Unicode).
Представление UTF-8 создается по требованию и кэшируется в объекте Unicode.
Примечание
Представление Py_UNICODE было удалено начиная с Python 3.12 вместе с устаревшими API. Подробнее см. PEP 623.
Тип Unicode
Это основные типы объектов Unicode, используемые для реализации Unicode в Python:
-
type Py_UCS4 -
type Py_UCS2 -
type Py_UCS1 - Часть Стабильной ABI.
Эти типы являются псевдонимами для целых беззнаковых типов, достаточно широких для хранения символов 32, 16 и 8 битов соответственно. При работе с отдельными символами Unicode используйте
Py_UCS4.Добавлен в версии 3.3.
-
type Py_UNICODE Это псевдоним для
wchar_t, представляющего собой 16-битный или 32-битный тип в зависимости от платформы.Изменено в версии 3.3: В предыдущих версиях это был 16-битный или 32-битный тип, в зависимости от выбора «узкого» или «широкого» Unicode-варианта Python во время компиляции.
Устарело начиная с версии 3.13, будет удалено в версии 3.15.
-
type PyASCIIObject -
type PyCompactUnicodeObject -
type PyUnicodeObject Эти подтипы
PyObjectпредставляют собой объект Unicode Python. Почти во всех случаях их не следует использовать напрямую, так как все функции API, работающие с объектами Unicode, принимают и возвращают указателиPyObject.Добавлен в версии 3.3.
-
PyTypeObject PyUnicode_Type - Часть Стабильной ABI.
Этот экземпляр
PyTypeObjectпредставляет собой тип Python Unicode. Он доступен в коде Python какstr.
Следующие API являются C макросами и статическими встроенными функциями для быстрой проверки и доступа к внутренним неизменяемым данным объектов Unicode:
-
int PyUnicode_Check(PyObject *obj) Возвращает true, если объект obj является объектом Unicode или экземпляром подтипа Unicode. Эта функция всегда выполняется успешно.
-
int PyUnicode_CheckExact(PyObject *obj) Возвращает true, если объект obj является объектом Unicode, но не экземпляром подтипа. Эта функция всегда выполняется успешно.
-
int PyUnicode_READY(PyObject *unicode) Возвращает
0. Этот API сохраняется только для обратной совместимости.Добавлен в версии 3.3.
Устарел начиная с версии 3.10: Этот API не выполняет никаких действий начиная с Python 3.12.
-
Py_ssize_t PyUnicode_GET_LENGTH(PyObject *unicode) Возвращает длину строки Unicode в кодовых точках. unicode должен быть объектом Unicode в «каноническом» представлении (не проверяется).
Добавлен в версии 3.3.
-
Py_UCS1 *PyUnicode_1BYTE_DATA(PyObject *unicode) -
Py_UCS2 *PyUnicode_2BYTE_DATA(PyObject *unicode) -
Py_UCS4 *PyUnicode_4BYTE_DATA(PyObject *unicode) Возвращает указатель на каноническое представление, преобразованный к целочисленным типам UCS1, UCS2 или UCS4 для прямого доступа к символам. Не выполняется проверка, соответствует ли каноническое представление правильному размеру символов; используйте
PyUnicode_KIND()для выбора правильной функции.Добавлен в версии 3.3.
-
PyUnicode_1BYTE_KIND -
PyUnicode_2BYTE_KIND -
PyUnicode_4BYTE_KIND Возвращаемые значения макроса
PyUnicode_KIND().Добавлен в версии 3.3.
Изменено в версии 3.12:
PyUnicode_WCHAR_KINDбыл удален.
-
int PyUnicode_KIND(PyObject *unicode) Возвращает одно из констант вида PyUnicode (см. выше), указывающих, сколько байтов на символ используется данным объектом Unicode для хранения данных. unicode должен быть объектом Unicode в «каноническом» представлении (не проверяется).
Добавлен в версии 3.3.
-
void *PyUnicode_DATA(PyObject *unicode) Возвращает указатель на необработанный буфер Unicode. unicode должен быть объектом 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()). Не выполняются проверки или вызовы ready.Добавлен в версии 3.3.
-
Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index) Читает символ из объекта Unicode unicode, который должен быть в «каноническом» представлении. Это менее эффективно, чем
PyUnicode_READ(), если выполняете несколько последовательных чтений.Добавлен в версии 3.3.
-
Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *unicode) Возвращает максимальную кодовую точку, подходящую для создания другой строки на основе unicode, которое должно быть в «каноническом» представлении. Это всегда приближение, но более эффективно, чем итерация по строке.
Добавлен в версии 3.3.
-
int PyUnicode_IsIdentifier(PyObject *unicode) - Часть Стабильной ABI.
Возвращает
1если строка является допустимым идентификатором в соответствии с определением языка, раздел Идентификаторы и ключевые слова. Возвращает0в противном случае.Изменено в версии 3.9: Функция больше не вызывает
Py_FatalError(), если строка не готова.
Свойства символов Юникода
Юникод предоставляет множество различных свойств символов. Наиболее часто используемые доступны через эти макросы, которые сопоставляются с функциями 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 символом прописной буквы.
-
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 печатным символом. Непечатные символы — это те символы, которые определены в базе данных символов Юникода как «Другие» или «Разделитель», за исключением ASCII-пробела (0x20), который считается печатным. (Обратите внимание, что печатные символы в этом контексте — это те, которые не должны быть экранированы при вызовеrepr()для строки. Это не влияет на обработку строк, записанных вsys.stdoutилиsys.stderr.)
Эти API могут использоваться для быстрой прямой конвертации символов:
-
Py_UCS4 Py_UNICODE_TOLOWER(Py_UCS4 ch) -
Возвращает символ ch, преобразованный в нижний регистр.
-
Py_UCS4 Py_UNICODE_TOUPPER(Py_UCS4 ch) -
Возвращает символ ch, преобразованный в верхний регистр.
-
Py_UCS4 Py_UNICODE_TOTITLE(Py_UCS4 ch) -
Возвращает символ ch, преобразованный в заглавный регистр.
-
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, преобразованный в двойное число. Возвращает
-1.0, если это невозможно. Эта функция не генерирует исключения.
Эти API могут использоваться для работы с суррогатами:
-
int Py_UNICODE_IS_SURROGATE(Py_UCS4 ch) -
Проверяет, является ли ch суррогатом (
0xD800 <= ch <= 0xDFFF).
-
int Py_UNICODE_IS_HIGH_SURROGATE(Py_UCS4 ch) -
Проверяет, является ли ch высоким суррогатом (
0xD800 <= ch <= 0xDBFF).
-
int Py_UNICODE_IS_LOW_SURROGATE(Py_UCS4 ch) -
Проверяет, является ли ch низким суррогатом (
0xDC00 <= ch <= 0xDFFF).
-
Py_UCS4 Py_UNICODE_JOIN_SURROGATES(Py_UCS4 high, Py_UCS4 low) -
Объединяет два кодовых пункта суррогата и возвращает одно значение
Py_UCS4. high и low соответственно — ведущий и заключительный суррогаты в паре суррогатов. high должен быть в диапазоне [0xD800; 0xDBFF], а low — в диапазоне [0xDC00; 0xDFFF].
Создание и доступ к строкам Юникода
Для создания объектов Юникода и доступа к их базовым свойствам последовательностей используйте эти API:
-
PyObject *PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar) -
Значение возврата: Новая ссылка.
Создает новый объект Юникода. maxchar должен быть истинным максимальным кодовым пунктом, который будет помещен в строку. Приблизительно его можно округлить до ближайшего значения в последовательности 127, 255, 65535, 1114111.
Это рекомендуемый способ выделения нового объекта Юникода. Объекты, созданные с помощью этой функции, не могут быть изменены в размерах.
При ошибке устанавливается исключение и возвращается
NULL.Добавлена в версии 3.3.
-
PyObject *PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size) -
Значение возврата: Новая ссылка.
Создает новый объект Юникода с заданным kind (возможные значения —
PyUnicode_1BYTE_KINDи т. д., как возвращаетсяPyUnicode_KIND()). buffer должен указывать на массив из size единиц по 1, 2 или 4 байта на символ, как задано в kind.При необходимости входной buffer копируется и преобразуется в каноническую форму. Например, если buffer — строка UCS4 (
PyUnicode_4BYTE_KIND) и она состоит только из кодовых точек в диапазоне UCS1, она будет преобразована в UCS1 (PyUnicode_1BYTE_KIND).Добавлена в версии 3.3.
-
PyObject *PyUnicode_FromStringAndSize(const char *str, Py_ssize_t size) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Создает объект Юникода из буфера символов str. Байты будут интерпретированы как закодированные в UTF-8. Буфер копируется в новый объект. Возвращаемое значение может быть общим объектом, т. е. изменение данных запрещено.
Эта функция вызывает
SystemErrorпри:- size < 0,
-
str —
NULLи size > 0
Изменено в версии 3.12: str ==
NULLс size > 0 больше не разрешено.
-
PyObject *PyUnicode_FromString(const char *str) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Создает объект Юникода из буфера символов str, закодированного в UTF-8, с нулевым завершением.
-
PyObject *PyUnicode_FromFormat(const char *format, ...) -
Возвращаемое значение: Новая ссылка. Часть Стабильной ABI.
Принимает строку форматирования C-стиля
printf()и переменное число аргументов, вычисляет размер получившейся строки Python Unicode и возвращает строку со значениями, отформатированными в неё. Переменные аргументы должны быть C-типами и должны точно соответствовать символам форматирования в ASCII-кодированной строке format.Спецификатор преобразования содержит два или более символов и имеет следующие компоненты, которые должны следовать в указанном порядке:
- Символ
'%', который отмечает начало спецификатора. - Флаги преобразования (необязательные), которые влияют на результат некоторых типов преобразований.
- Минимальная ширина поля (необязательная). Если указана как
'*'(звёздочка), фактическая ширина задаётся в следующем аргументе, который должен быть типа int, а объект для преобразования следует за минимальной шириной поля и необязательной точностью. - Точность (необязательная), заданная как
'.'(точка) и значение точности. Если указана как'*'(звёздочка), фактическая точность задаётся в следующем аргументе, который должен быть типа int, а значение для преобразования следует за точностью. - Модификатор длины (необязательный).
- Тип преобразования.
Символы флагов преобразования:
Флаг
Значение
0Преобразование будет дополняться нулями для числовых значений.
-Преобразованное значение выравнивается влево (переопределяет флаг
0при совместном использовании).Модификаторы длины для следующих целочисленных преобразований (
d,i,o,u,x, илиX):Модификатор
Типы
llong или unsigned long
lllong long или unsigned long long
jintmax_tилиuintmax_tzsize_tилиssize_ttptrdiff_tМодификатор длины
lдля следующих преобразованийsилиVзадаёт тип аргумента как const wchar_t*.Спецификаторы преобразования:
Спецификатор преобразования
Тип
Комментарий
%n/a
Литеральный символ
%.d,iОпределяется модификатором длины
Десятичное представление знакового целочисленного значения C.
uОпределяется модификатором длины
Десятичное представление беззнакового целочисленного значения C.
oОпределяется модификатором длины
Восьмеричное представление беззнакового целочисленного значения C.
xОпределяется модификатором длины
Шестнадцатеричное представление беззнакового целочисленного значения C (строчные буквы).
XОпределяется модификатором длины
Шестнадцатеричное представление беззнакового целочисленного значения C (заглавные буквы).
cint
Один символ.
sconst char* или const wchar_t*
Нуль-терминированная C-строка символов.
pconst void*
Шестнадцатеричное представление C-указателя. В основном эквивалентно
printf("%p"), но гарантированно начинается с литерала0xнезависимо от того, что возвращаетprintfплатформы.AРезультат вызова
ascii().UОбъект Unicode.
VPyObject*, const char* или const wchar_t*
Объект Unicode (который может быть
NULLи нуль-терминированная C-строка символов в качестве второго параметра (которая будет использована, если первый параметрNULL).SРезультат вызова
PyObject_Str().RРезультат вызова
PyObject_Repr().TПолучить полное квалифицированное имя типа объекта; вызвать
PyType_GetFullyQualifiedName().#TАналогично спецификатору
Tформатирования, но использует двоеточие (:) в качестве разделителя между именем модуля и квалифицированным именем.NПолучить полное квалифицированное имя типа; вызвать
PyType_GetFullyQualifiedName().#NАналогично спецификатору
Nформатирования, но использует двоеточие (:) в качестве разделителя между именем модуля и квалифицированным именем.Примечание
Единица измерения ширины форматирования — количество символов, а не байтов. Единица измерения точности форматирования — количество байтов или
wchar_tэлементов (если используется модификатор длиныl) для"%s"и"%V"(если аргументPyObject*являетсяNULL), и количество символов для"%A","%U","%S","%R"и"%V"(если аргументPyObject*не являетсяNULL).Примечание
В отличие от C
printf(), флаг0действует даже при задании точности для целочисленных преобразований (d,i,u,o,x, илиX).Изменено в версии 3.2: Добавлена поддержка
"%lld"и"%llu". - Символ
Изменено в версии 3.3: Добавлена поддержка
"%li","%lli"и"%zi".Изменено в версии 3.4: Добавлена поддержка форматирования ширины и точности для
"%s","%A","%U","%V","%S","%R".Изменено в версии 3.12: Поддержка спецификаторов преобразования
oиX. Поддержка модификаторов длиныjиt. Модификаторы длины теперь применяются ко всем целочисленным преобразованиям. Модификатор длиныlтеперь применяется к спецификаторам преобразованияsиV. Поддержка переменной ширины и точности*. Поддержка флага-.Нераспознанный символ формата теперь устанавливает
SystemError. В предыдущих версиях это приводило к тому, что остальная часть строки формата копировалась в результирующую строку как есть, а любые дополнительные аргументы отбрасывались.Изменено в версии 3.13: Добавлена поддержка форматов
%T,%#T,%Nи%#N.
-
PyObject *PyUnicode_FromFormatV(const char *format, va_list vargs) -
Значение возврата: Новый ссылка. Часть Стабильной ABI.
Идентично
PyUnicode_FromFormat(), за исключением того, что принимает ровно два аргумента.
-
PyObject *PyUnicode_FromObject(PyObject *obj) -
Значение возврата: Новый ссылка. Часть Стабильной ABI.
Копирует экземпляр подтипа Unicode в новый истинный объект Unicode, если необходимо. Если obj уже является истинным объектом Unicode (не подтипом), возвращает новую сильную ссылку на объект.
Объекты, отличные от Unicode или его подтипов, вызовут
TypeError.
-
PyObject *PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors) -
Значение возврата: Новый ссылка. Часть Стабильной ABI.
Декодирует закодированный объект obj в объект Unicode.
bytes,bytearrayи другие объекты типа bytes декодируются в соответствии с заданным encoding и с помощью обработки ошибок, определенной errors. Оба могут бытьNULLдля использования интерфейсом значений по умолчанию (см. Встроенные кодеки для получения подробной информации).Все остальные объекты, включая объекты Unicode, вызовут
TypeError.API возвращает
NULLв случае ошибки. Вызывающая сторона отвечает за уменьшение количества ссылок на возвращённые объекты.
-
Py_ssize_t PyUnicode_GetLength(PyObject *unicode) -
Часть Стабильной ABI с версии 3.7.
Возвращает длину объекта Unicode в кодовых точках.
При ошибке устанавливает исключение и возвращает
-1.Добавлена в версии 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) -
Часть Стабильной ABI с версии 3.7.
Записывает символ в строку. Строка должна быть создана с помощью
PyUnicode_New(). Поскольку строки Unicode предполагаются неизменяемыми, строка не должна быть общей или уже хеширована.Функция проверяет, что unicode является объектом Unicode, что индекс не выходит за пределы границ и что объект может быть изменён безопасно (т. е. что счётчик его ссылок равен единице).
Возвращает
0при успехе,-1при ошибке с установленным исключением.Добавлена в версии 3.3.
-
Py_UCS4 PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index) -
Часть Стабильной ABI с версии 3.7.
Читает символ из строки. Эта функция проверяет, что unicode является объектом Unicode и что индекс не выходит за пределы границ, в отличие от
PyUnicode_READ_CHAR(), которая не выполняет проверки на ошибки.Возвращает символ при успехе,
-1при ошибке с установленным исключением.Добавлена в версии 3.3.
-
PyObject *PyUnicode_Substring(PyObject *unicode, Py_ssize_t start, Py_ssize_t end) -
Значение возврата: Новый ссылка. Часть Стабильной ABI с версии 3.7.
Возвращает подстроку unicode, начиная с символа с индексом start (включительно) до символа с индексом end (исключительно). Отрицательные индексы не поддерживаются. При ошибке устанавливает исключение и возвращает
NULL.Добавлена в версии 3.3.
-
Py_UCS4 *PyUnicode_AsUCS4(PyObject *unicode, Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null) -
Часть Стабильной ABI с версии 3.7.
Копирует строку unicode в буфер UCS4, включая нулевой символ, если copy_null установлен. Возвращает
NULLи устанавливает исключение при ошибке (в частности,SystemError, если buflen меньше длины unicode). buffer возвращается при успехе.Добавлена в версии 3.3.
-
Py_UCS4 *PyUnicode_AsUCS4Copy(PyObject *unicode) -
Часть Стабильной ABI с версии 3.7.
Копирует строку unicode в новый буфер UCS4, выделенный с помощью
PyMem_Malloc(). Если это не удаётся, возвращаетсяNULLс установленнымMemoryError. Возвращаемый буфер всегда имеет дополнительный нулевой код точки, добавленный в конце.Добавлена в версии 3.3.
Кодировка локали
Текущая кодировка локали может быть использована для декодирования текста из операционной системы.
-
PyObject *PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t length, const char *errors) -
Возвращаемое значение: новая ссылка. Часть Стабильной ABI с версии 3.7.
Декодирует строку из UTF-8 на Android и VxWorks, или из текущей кодировки локали на других платформах. Поддерживаемые обработчики ошибок —
"strict"и"surrogateescape"(PEP 383). Декодер использует обработчик ошибок"strict"если errors имеет значениеNULL. str должна заканчиваться нулевым символом, но не может содержать вложенные нулевые символы.Используйте
PyUnicode_DecodeFSDefaultAndSize()для декодирования строки из кодировки и обработчика ошибок файловой системы.Эта функция игнорирует Режим Python UTF-8.
См. также
Функцию
Py_DecodeLocale().Добавлена в версии 3.3.
Изменено в версии 3.7: Функция теперь также использует текущую кодировку локали для обработчика ошибок
surrogateescape, за исключением Android. Ранее использовалась функцияPy_DecodeLocale()дляsurrogateescape, а текущая кодировка локали использовалась дляstrict.
-
PyObject *PyUnicode_DecodeLocale(const char *str, const char *errors) -
Возвращаемое значение: новая ссылка. Часть Стабильной ABI с версии 3.7.
Аналогично
PyUnicode_DecodeLocaleAndSize(), но длина строки вычисляется с помощьюstrlen().Добавлена в версии 3.3.
-
PyObject *PyUnicode_EncodeLocale(PyObject *unicode, const char *errors) -
Возвращаемое значение: новая ссылка. Часть Стабильной ABI с версии 3.7.
Кодирует объект Unicode в UTF-8 на Android и VxWorks, или в текущую кодировку локали на других платформах. Поддерживаемые обработчики ошибок —
"strict"и"surrogateescape"(PEP 383). Кодировщик использует обработчик ошибок"strict"если errors имеет значениеNULL. Возвращает объектbytes. unicode не может содержать вложенные нулевые символы.Используйте
PyUnicode_EncodeFSDefault()для кодирования строки в кодировку и обработчик ошибок файловой системы.Эта функция игнорирует Режим Python UTF-8.
См. также
Функцию
Py_EncodeLocale().Добавлена в версии 3.3.
Изменено в версии 3.7: Функция теперь также использует текущую кодировку локали для обработчика ошибок
surrogateescape, за исключением Android. Ранее использовалась функцияPy_EncodeLocale()дляsurrogateescape, а текущая кодировка локали использовалась дляstrict.
Кодировка файловой системы
Функции кодирования и декодирования из кодировки и обработчика ошибок файловой системы (PEP 383 и PEP 529).
Для кодирования имён файлов в bytes во время разбора аргументов следует использовать преобразователь "O&", передавая функцию преобразования PyUnicode_FSConverter():
-
int PyUnicode_FSConverter(PyObject *obj, void *result) -
Часть Стабильной 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) -
Часть Стабильной ABI.
Преобразователь ParseTuple: декодирует объекты
bytes– полученные непосредственно или косвенно через интерфейсos.PathLike– вstrс помощьюPyUnicode_DecodeFSDefaultAndSize(); объектыstrвыводятся как есть. result должен быть PyUnicodeObject*, который необходимо освободить, когда он больше не используется.Добавлена в версии 3.2.
Изменено в версии 3.6: Принимает объект типа путь.
-
PyObject *PyUnicode_DecodeFSDefaultAndSize(const char *str, Py_ssize_t size) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Декодирует строку из кодировки и обработчика ошибок файловой системы.
Если вам нужно декодировать строку из кодировки текущего локали, используйте
PyUnicode_DecodeLocaleAndSize().См. также
Функцию
Py_DecodeLocale().Изменено в версии 3.6: Теперь используется обработчик ошибок файловой системы.
-
PyObject *PyUnicode_DecodeFSDefault(const char *str) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Декодирует строку с нулевым завершением из кодировки и обработчика ошибок файловой системы.
Если длина строки известна, используйте
PyUnicode_DecodeFSDefaultAndSize().Изменено в версии 3.6: Теперь используется обработчик ошибок файловой системы.
-
PyObject *PyUnicode_EncodeFSDefault(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодирует объект Unicode в кодировке и обработчике ошибок файловой системы и возвращает
bytes. Обратите внимание, что полученный объектbytesможет содержать нулевые байты.Если вам нужно закодировать строку в кодировке текущего локали, используйте
PyUnicode_EncodeLocale().См. также
Функцию
Py_EncodeLocale().Добавлена в версии 3.2.
Изменено в версии 3.6: Теперь используется обработчик ошибок файловой системы.
Поддержка wchar_t
wchar_t поддержка для платформ, которые её поддерживают:
-
PyObject *PyUnicode_FromWideChar(const wchar_t *wstr, Py_ssize_t size) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Создаёт объект Unicode из буфера
wchar_twstr заданного размера. Передача-1в качестве размера означает, что функция должна сама вычислить длину, используяwcslen(). ВозвращаетNULLпри ошибке.
-
Py_ssize_t PyUnicode_AsWideChar(PyObject *unicode, wchar_t *wstr, Py_ssize_t size) -
Часть Стабильной ABI.
Копирует содержимое объекта Unicode в буфер
wchar_twstr. Максимально копируется sizewchar_tсимволов (исключая возможный завершающий нулевой символ). Возвращает количество скопированныхwchar_tсимволов или-1в случае ошибки.Когда wstr является
NULL, вместо этого возвращается размер, необходимый для хранения всех данных unicode, включая завершающий нуль.Обратите внимание, что результирующая строка wchar_t* может или не быть завершаемой нулём. Ответственность за обеспечение завершения строки wchar_t* нулём, если это требуется приложением, лежит на вызывающей стороне. Также обратите внимание, что строка wchar_t* может содержать нулевые символы, что приведёт к обрезанию строки при использовании с большинством функций C.
-
wchar_t *PyUnicode_AsWideCharString(PyObject *unicode, Py_ssize_t *size) -
Часть Стабильной ABI с версии 3.7.
Преобразует объект Unicode в строку широких символов. Результирующая строка всегда завершается нулевым символом. Если size не
NULL, запишите количество широких символов (исключая завершающий нулевой символ) в *size. Обратите внимание, что результирующая строкаwchar_tможет содержать нулевые символы, что приведёт к обрезанию строки при использовании с большинством функций C. Если sizeNULLи строка wchar_t* содержит нулевые символы, возникает исключениеValueError.Возвращает буфер, выделенный с помощью
PyMem_New(используйтеPyMem_Free()для его освобождения) в случае успеха. При ошибке возвращаетNULL, а *size неопределено. Вызывает исключениеMemoryErrorв случае неудачи выделения памяти.Добавлена в версии 3.2.
Изменено в версии 3.7: Вызывает исключение
ValueError, если sizeNULLи строка wchar_t* содержит нулевые символы.
Встроенные кодеки
Python предоставляет набор встроенных кодеков, написанных на C для повышения скорости. Все эти кодеки напрямую доступны через следующие функции.
Многие из следующих API принимают два аргумента: кодировку и обработку ошибок, и у них такая же семантика, как у встроенного конструктора строки str().
Установка кодировки на NULL приводит к использованию кодировки по умолчанию, которая UTF-8. Системные вызовы к файловой системе должны использовать PyUnicode_FSConverter() для кодирования имён файлов. Это использует кодировку и обработчик ошибок файловой системы внутри.
Обработка ошибок задаётся параметром errors, который также может быть установлен на NULL, что означает использование обработки по умолчанию, определённой для кодека. Обработка ошибок по умолчанию для всех встроенных кодеков — «строгая» (ValueError поднимается).
Все кодеки используют похожий интерфейс. Для простоты документируются только отклонения от общих.
Общие кодеки
Это общие API для кодеков:
-
PyObject *PyUnicode_Decode(const char *str, Py_ssize_t size, const char *encoding, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создаёт объект Unicode, декодируя size байт закодированной строки str. encoding и errors имеют такое же значение, как параметры с таким же именем в встроенной функции
str(). Используемый кодек ищется в реестре кодеков Python. ВозвращаетNULL, если кодек поднял исключение.
-
PyObject *PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодирует объект Unicode и возвращает результат как объект Python типа bytes. encoding и errors имеют такое же значение, как параметры с таким же именем в методе Unicode
encode(). Используемый кодек ищется в реестре кодеков Python. ВозвращаетNULL, если кодек поднял исключение.
Кодеки UTF-8
Это API кодеков UTF-8:
-
PyObject *PyUnicode_DecodeUTF8(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создаёт объект Unicode, декодируя size байт строки str, закодированной в UTF-8. Возвращает
NULL, если кодек поднял исключение.
-
PyObject *PyUnicode_DecodeUTF8Stateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeUTF8(). Если consumed не равноNULL, не будут обрабатываться как ошибка фрагменты неполных последовательностей байтов UTF-8. Эти байты не будут декодированы, и количество декодированных байтов будет сохранено в consumed.
-
PyObject *PyUnicode_AsUTF8String(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодирует объект Unicode в UTF-8 и возвращает результат как объект Python типа bytes. Обработка ошибок — «строгая». Возвращает
NULL, если кодек поднял исключение.Функция завершается ошибкой, если строка содержит суррогатные коды (
U+D800-U+DFFF).
-
const char *PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size) -
Часть Стабильной ABI начиная с версии 3.10.
Возвращает указатель на UTF-8 кодировку объекта Unicode и сохраняет размер закодированного представления (в байтах) в size. Аргумент size может быть
NULL; в этом случае размер не будет сохранён. Возвращаемый буфер всегда имеет дополнительный нулевой байт в конце (не включён в size), независимо от того, есть ли другие нулевые кодовые точки.При ошибке устанавливается исключение, size устанавливается в
-1(если он не NULL) и возвращаетсяNULL.Функция завершается ошибкой, если строка содержит суррогатные коды (
U+D800-U+DFFF).Функция кэширует 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 *.
Кодеки UTF-32
Это API кодеков UTF-32:
-
PyObject *PyUnicode_DecodeUTF32(const char *str, Py_ssize_t size, const char *errors, int *byteorder) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Декодирует size байт из буфера, закодированного в UTF-32, и возвращает соответствующий объект Unicode. errors (если не
NULL) определяет обработку ошибок. По умолчанию — «строгая».Если 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 *str, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeUTF32(). Если consumed не равноNULL,PyUnicode_DecodeUTF32Stateful()не будет обрабатывать неполные последовательности байтов UTF-32 (например, количество байтов не кратно четырём) как ошибку. Эти байты не будут декодированы, и количество декодированных байтов будет сохранено в consumed.
-
PyObject *PyUnicode_AsUTF32String(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Возвращает строку Python типа bytes, используя кодировку UTF-32 в родном порядке байтов. Строка всегда начинается со знака BOM. Обработка ошибок — «строгая». Возвращает
NULLесли кодек поднял исключение.
Кодеки UTF-16
Это API кодеков UTF-16:
-
PyObject *PyUnicode_DecodeUTF16(const char *str, Py_ssize_t size, const char *errors, int *byteorder) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Декодировать size байтов из буфера строки, закодированной в UTF-16, и вернуть соответствующий объект Unicode. errors (если не
NULL) определяет обработку ошибок. По умолчанию — «строго».Если 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 *str, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Если consumed равно
NULL, ведите себя какPyUnicode_DecodeUTF16(). Если consumed не равноNULL,PyUnicode_DecodeUTF16Stateful()не будет обрабатывать неполные последовательности байтов UTF-16 (например, нечётное число байтов или разделенная пара суррогатов) как ошибку. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в consumed.
-
PyObject *PyUnicode_AsUTF16String(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Возвращает строку байтов Python, используя кодировку UTF-16 в родном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок — «строго». Возвращает
NULL, если кодек вызвал исключение.
Кодеки UTF-7
Это API кодеков UTF-7:
-
PyObject *PyUnicode_DecodeUTF7(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создать объект Unicode, декодировав size байтов из строки, закодированной в UTF-7, str. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *PyUnicode_DecodeUTF7Stateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Если consumed равно
NULL, ведите себя какPyUnicode_DecodeUTF7(). Если consumed не равноNULL, неполные секции UTF-7 base-64 не будут обрабатываться как ошибка. Эти байты не будут декодированы, а количество декодированных байтов будет сохранено в consumed.
Кодеки «Unicode Escape»
Это API кодеков «Unicode Escape»:
-
PyObject *PyUnicode_DecodeUnicodeEscape(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создать объект Unicode, декодировав size байтов из строки, закодированной в «Unicode Escape», str. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *PyUnicode_AsUnicodeEscapeString(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодировать объект Unicode с использованием «Unicode Escape» и возвращать результат в виде объекта bytes. Обработка ошибок — «строго». Возвращает
NULL, если кодек вызвал исключение.
Кодеки «Raw Unicode Escape»
Это API кодеков «Raw Unicode Escape»:
-
PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создать объект Unicode, декодировав size байтов из строки, закодированной в «Raw Unicode Escape», str. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодировать объект Unicode с использованием «Raw Unicode Escape» и возвращать результат в виде объекта bytes. Обработка ошибок — «строго». Возвращает
NULL, если кодек вызвал исключение.
Кодеки Latin-1
Это API кодеков Latin-1: Latin-1 соответствует первым 256 порядковым номерам Unicode, и только они принимаются кодеками во время кодирования.
-
PyObject *PyUnicode_DecodeLatin1(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создать объект Unicode, декодировав size байтов из строки, закодированной в Latin-1, str. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *PyUnicode_AsLatin1String(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодировать объект Unicode с использованием Latin-1 и возвращать результат как объект Python bytes. Обработка ошибок — «строго». Возвращает
NULL, если кодек вызвал исключение.
Кодеки ASCII
Это API кодеков ASCII. Принимаются только данные ASCII 7 бит. Все другие коды генерируют ошибки.
-
PyObject *PyUnicode_DecodeASCII(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Создать объект Unicode, декодировав size байтов из строки, закодированной в ASCII, str. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *PyUnicode_AsASCIIString(PyObject *unicode) -
Значение возврата: новая ссылка. Часть Стабильной ABI.
Кодировать объект Unicode с использованием ASCII и возвращать результат как объект Python bytes. Обработка ошибок — «строго». Возвращает
NULL, если кодек вызвал исключение.
Карта символов Кодеки
Этот кодек является особым, так как он может быть использован для реализации многих различных кодеков (и именно так были получены большинство стандартных кодеков, включённых в encodings пакет). Кодек использует сопоставления для кодирования и декодирования символов. Объекты сопоставления, предоставляемые, должны поддерживать интерфейс сопоставления __getitem__(); словари и последовательности работают хорошо.
Вот API кодеков сопоставления:
-
PyObject *PyUnicode_DecodeCharmap(const char *str, Py_ssize_t length, PyObject *mapping, const char *errors) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Создаёт объект Unicode, декодируя size байтов закодированной строки str, используя предоставленный объект mapping. Возвращает
NULLесли исключение было возбуждено кодеком.Если mapping является
NULL, будет применено декодирование Latin-1. В противном случае mapping должен сопоставлять порядковые номера байтов (целые числа в диапазоне от 0 до 255) с строками Unicode, целыми числами (которые затем интерпретируются как порядковые номера Unicode) илиNone. Несопоставленные байты данных – те, которые вызываютLookupError, а также те, которые отображаются наNone,0xFFFEили'\ufffe', обрабатываются как неопределённые сопоставления и вызывают ошибку.
-
PyObject *PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Кодирует объект Unicode, используя предоставленный объект mapping, и возвращает результат как объект байтов. Обработка ошибок – «строгая». Возвращает
NULLесли исключение было возбуждено кодеком.Объект mapping должен сопоставлять целые числа порядковых номеров Unicode с объектами байтов, целыми числами в диапазоне от 0 до 255 или
None. Несопоставленные порядковые номера символов (те, которые вызываютLookupError), а также отображённые наNoneобрабатываются как «неопределённое сопоставление» и вызывают ошибку.
Следующий API кодека является особым, так как сопоставляет Unicode с Unicode.
-
PyObject *PyUnicode_Translate(PyObject *unicode, PyObject *table, const char *errors) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Преобразует строку, применяя к ней таблицу сопоставления символов, и возвращает полученный объект Unicode. Возвращает
NULLесли исключение было возбуждено кодеком.Таблица сопоставления должна сопоставлять целые числа порядковых номеров Unicode с целыми числами порядковых номеров Unicode или
None(вызывая удаление символа).Таблицы сопоставления должны только предоставлять интерфейс
__getitem__(); словари и последовательности работают хорошо. Несопоставленные порядковые номера символов (те, которые вызываютLookupError) остаются нетронутыми и копируются как есть.errors имеет обычное значение для кодеков. Это может быть
NULLчто указывает на использование стандартной обработки ошибок.
MBCS-кодеки для Windows
Вот API MBCS-кодеков. В настоящее время они доступны только в Windows и используют преобразователи MBCS Win32 для реализации преобразований. Обратите внимание, что MBCS (или DBCS) – это класс кодировок, а не одна кодировка. Целевая кодировка определяется настройками пользователя на компьютере, на котором работает кодек.
-
PyObject *PyUnicode_DecodeMBCS(const char *str, Py_ssize_t size, const char *errors) -
Значение возврата: Новая ссылка. Часть Стабильной ABI в Windows с версии 3.7.
Создаёт объект Unicode, декодируя size байтов строки MBCS str. Возвращает
NULLесли исключение было возбуждено кодеком.
-
PyObject *PyUnicode_DecodeMBCSStateful(const char *str, 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, и возвращает результат как объект Python байтов. Обработка ошибок – «строгая». Возвращает
NULLесли исключение было возбуждено кодеком.
-
PyObject *PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, const char *errors) -
Значение возврата: Новая ссылка. Часть Стабильной ABI в Windows с версии 3.7.
Кодирует объект Unicode, используя указанную кодовую страницу, и возвращает объект Python байтов. Возвращает
NULLесли исключение было возбуждено кодеком. Используйте кодовую страницуCP_ACPдля получения MBCS-кодера.Добавлен в версии 3.3.
Методы и слоты
Методы и функции слотов
Следующие API могут обрабатывать объекты и строки Unicode на входе (в описаниях мы будем называть их строками) и возвращать объекты Unicode или целые числа, в зависимости от ситуации.
Все они возвращают NULL или -1 в случае возникновения исключения.
-
PyObject *PyUnicode_Concat(PyObject *left, PyObject *right) -
Значение возврата: Новая ссылка. Часть Стабильного ABI.
Конкатенация двух строк, возвращающая новую строку Unicode.
-
PyObject *PyUnicode_Split(PyObject *unicode, PyObject *sep, Py_ssize_t maxsplit) -
Значение возврата: Новая ссылка. Часть Стабильного ABI.
Разделение строки, возвращающее список строк Unicode. Если sep равно
NULL, разделение будет происходить по всем подстрокам пробелов. В противном случае, разделение происходит по заданному разделителю. Максимальное количество разделений — maxsplit. Если значение отрицательное, ограничений нет. Разделители не включаются в результирующий список.
-
PyObject *PyUnicode_Splitlines(PyObject *unicode, int keepends) -
Значение возврата: Новая ссылка. Часть Стабильного ABI.
Разделение строки Unicode по символам перевода строки, возвращающее список строк Unicode. CRLF рассматривается как один символ перевода строки. Если keepends равно
0, символы перевода строки не включаются в результирующие строки.
-
PyObject *PyUnicode_Join(PyObject *separator, PyObject *seq) -
Значение возврата: Новая ссылка. Часть Стабильного ABI.
Объединение последовательности строк с использованием заданного разделителя separator и возвращение полученной строки Unicode.
-
Py_ssize_t PyUnicode_Tailmatch(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction) -
Часть Стабильного ABI.
Возвращает
1если substr совпадает сunicode[start:end]в заданном конце (direction ==-1означает поиск совпадения в начале, direction ==1— в конце),0в противном случае. Возвращает-1если произошла ошибка.
-
Py_ssize_t PyUnicode_Find(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction) -
Часть Стабильного ABI.
Возвращает первую позицию substr в
unicode[start:end]с использованием заданного направления (direction ==1означает поиск вперёд, direction ==-1— назад). Значение возврата — индекс первого совпадения; значение-1указывает, что совпадение не найдено, а-2— что произошла ошибка и было установлено исключение.
-
Py_ssize_t PyUnicode_FindChar(PyObject *unicode, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int direction) -
Часть Стабильного ABI с версии 3.7.
Возвращает первую позицию символа ch в
unicode[start:end]с использованием заданного направления (direction ==1означает поиск вперёд, direction ==-1— назад). Значение возврата — индекс первого совпадения; значение-1указывает, что совпадение не найдено, а-2— что произошла ошибка и было установлено исключение.Добавлен в версии 3.3.
Изменено в версии 3.7: start и end теперь корректируются так, чтобы вести себя как
unicode[start:end].
-
Py_ssize_t PyUnicode_Count(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end) -
Часть Стабильного ABI.
Возвращает количество непересекающихся вхождений substr в
unicode[start:end]. Возвращает-1в случае ошибки.
-
PyObject *PyUnicode_Replace(PyObject *unicode, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount) -
Значение возврата: Новая ссылка. Часть Стабильного ABI.
Заменяет не более maxcount вхождений substr в unicode на replstr и возвращает результирующий объект Unicode. maxcount ==
-1означает замену всех вхождений.
-
int PyUnicode_Compare(PyObject *left, PyObject *right) -
Часть Стабильного ABI.
Сравнивает две строки и возвращает
-1,0,1для меньше, равно, больше соответственно.Эта функция возвращает
-1при ошибке, поэтому следует вызватьPyErr_Occurred()для проверки ошибок.
-
int PyUnicode_EqualToUTF8AndSize(PyObject *unicode, const char *string, Py_ssize_t size) -
Часть Стабильного ABI с версии 3.13.
Сравнивает объект Unicode с буфером символов, интерпретируемым как закодированный в UTF-8 или ASCII, и возвращает true (
1) если они равны, или false (0) в противном случае. Если объект Unicode содержит суррогатные коды (U+D800-U+DFFF) или C-строка не является валидным UTF-8, возвращается false (0).Эта функция не генерирует исключения.
Добавлен в версии 3.13.
-
int PyUnicode_EqualToUTF8(PyObject *unicode, const char *string) -
Часть Стабильного ABI с версии 3.13.
Аналогично
PyUnicode_EqualToUTF8AndSize(), но вычисляет длину string с использованиемstrlen(). Если объект Unicode содержит нулевые символы, возвращается false (0).Добавлен в версии 3.13.
-
int PyUnicode_CompareWithASCIIString(PyObject *unicode, const char *string) -
Часть Стабильного ABI.
Сравнивает объект Unicode, unicode, со строкой string и возвращает
-1,0,1для меньше, равно, больше соответственно. Лучше всего передавать только ASCII-строки, но функция интерпретирует входную строку как ISO-8859-1, если она содержит не-ASCII символы.Эта функция не генерирует исключения.
-
PyObject *PyUnicode_RichCompare(PyObject *left, PyObject *right, int op) -
Значение возврата: Новая ссылка. Часть Стабильного 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) -
Значение возврата: Новая ссылка. Часть Стабильного ABI.
Возвращает новый объект строки из format и args; это аналогично
format % args.
-
int PyUnicode_Contains(PyObject *unicode, PyObject *substr) -
Часть Стабильного ABI.
Проверяет, содержится ли substr в unicode и возвращает true или false соответственно.
substr должен быть приведён к строке Unicode одного элемента.
-1возвращается в случае ошибки.
-
void PyUnicode_InternInPlace(PyObject **p_unicode) -
Часть стабильного ABI.
Интернирует аргумент *p_unicode на месте. Аргумент должен быть адресом указателя на объект Python Unicode-строки. Если существует уже интернированная строка, совпадающая со значением *p_unicode, то *p_unicode устанавливается на неё (освобождая ссылку на старый объект строки и создавая новую сильную ссылку на интернированный объект строки), иначе *p_unicode остаётся без изменений и интернируется.
(Пояснение: несмотря на многочисленные упоминания о ссылках, подумайте об этой функции как о нейтральной по отношению к ссылкам. Вы должны владеть объектом, который передаёте; после вызова вы больше не владеете переданной ссылкой, но вы владеете результатом.)
Эта функция никогда не генерирует исключение. При ошибке она оставляет свой аргумент без изменений, не интернируя его.
Объекты подклассов
strмогут не интернироваться, то есть, PyUnicode_CheckExact(*p_unicode) должно быть истинным. Если это не так, то – как и при любой другой ошибке – аргумент остаётся без изменений.Обратите внимание, что интернированные строки не являются «бессмертными». Вы должны сохранить ссылку на результат, чтобы воспользоваться интернированием.
-
PyObject *PyUnicode_InternFromString(const char *str) -
Значение возврата: Новая ссылка. Часть стабильного ABI.
Комбинация
PyUnicode_FromString()иPyUnicode_InternInPlace(), предназначенная для статически выделенных строк.Возвращает новую («владеющую») ссылку на либо новый интернированный объект Unicode-строки, либо уже интернированную строку с тем же значением.
Python может сохранить ссылку на результат или сделать её бессмертной, предотвращая его быстрое удаление сборщиком мусора. Для интернирования неограниченного числа различных строк, таких как вводимые пользователем, предпочтительнее вызывать
PyUnicode_FromString()иPyUnicode_InternInPlace()напрямую.Деталь реализации CPython: Строки, интернированные таким образом, делаются бессмертными.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/unicode.html