Объекты и кодеки Юникода¶
Объекты Юникода¶
Начиная с реализации PEP 393 в Python 3.3, объекты Unicode внутри используют различные представления, чтобы обеспечить работу с полным диапазоном символов Unicode, оставаясь при этом эффективными для памяти. Существуют специальные случаи для строк, в которых все кодовые точки меньше 128, 256 или 65536; в противном случае кодовые точки должны быть меньше 1114112 (это полный диапазон Unicode).
Представления Py_UNICODE* и UTF-8 создаются по требованию и кэшируются в объекте Unicode. Представление Py_UNICODE* является устаревшим и неэффективным.
В связи с переходом от старых API к новым API, объекты Unicode могут находиться в двух состояниях в зависимости от того, как они были созданы:
«Канонические» объекты Unicode - это все объекты, созданные с помощью не устаревшего API Unicode. Они используют наиболее эффективное представление, допускаемое реализацией.
«Устаревшие» объекты Unicode были созданы с помощью одного из устаревших API (обычно
PyUnicode_FromUnicode()) и имеют только представление Py_UNICODE*; вам придется вызвать для нихPyUnicode_READY()перед вызовом любого другого API.
Примечание
«Устаревший» объект Unicode будет удален в Python 3.12 с устаревшими API. С тех пор все объекты Unicode будут «каноническими». Для получения дополнительной информации смотрите PEP 623.
Тип Юникода¶
Это основные типы объектов Unicode, используемые для реализации Unicode в Python:
-
type
Py_UCS4¶ -
type
Py_UCS2¶ -
type
Py_UCS1¶ - Part of the Stable ABI.
Эти типы являются типовыми определениями для беззнаковых целочисленных типов, достаточно широких, чтобы содержать символы размером 32 бита, 16 бит и 8 бит соответственно. При работе с одиночными символами Unicode используйте
Py_UCS4.Добавлено в версии 3.3.
-
type
Py_UNICODE¶ Это типизация
wchar_t, который является 16-битным или 32-битным типом в зависимости от платформы.Изменено в версии 3.3: В предыдущих версиях это был 16-битный тип или 32-битный тип в зависимости от того, какую версию Python вы выбрали при сборке - «узкую» или «широкую» Unicode.
-
type
PyASCIIObject¶ -
type
PyCompactUnicodeObject¶ -
type
PyUnicodeObject¶ Эти подтипы
PyObjectпредставляют объект Python Unicode. Почти во всех случаях их не следует использовать напрямую, поскольку все функции API, работающие с объектами Unicode, принимают и возвращают указателиPyObject.Добавлено в версии 3.3.
-
PyTypeObject
PyUnicode_Type¶ - Part of the Stable ABI.
Этот экземпляр
PyTypeObjectпредставляет тип Python Unicode. Он отображается в коде 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.
Deprecated since version 3.10, will be removed in version 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.
Deprecated since version 3.10, will be removed in version 3.12:
PyUnicode_WCHAR_KINDустарел.
-
unsigned int
PyUnicode_KIND(PyObject *o)¶ Возвращает одну из констант вида PyUnicode (см. выше), которая указывает, сколько байт на символ использует этот объект 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 (не проверяется).Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование
PyUnicode_GET_LENGTH().
-
Py_ssize_t
PyUnicode_GET_DATA_SIZE(PyObject *o)¶ Возвращает размер устаревшего представления
Py_UNICODEв байтах. o должен быть объектом Unicode (не проверяется).Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование
PyUnicode_GET_LENGTH().
-
Py_UNICODE *
PyUnicode_AS_UNICODE(PyObject *o)¶ -
const char *
PyUnicode_AS_DATA(PyObject *o)¶ Возвращает указатель на
Py_UNICODEпредставление объекта. Возвращаемый буфер всегда завершается дополнительной нулевой точкой кода. Он также может содержать встроенные нулевые точки кода, что приведет к усечению строки при использовании в большинстве функций языка Си. ФормаAS_DATAприводит указатель к const char*. Аргумент o должен быть объектом Unicode (не проверяется).Изменено в версии 3.3: Теперь этот макрос неэффективен - поскольку во многих случаях представление
Py_UNICODEне существует и должно быть создано - и может не сработать (вернутьNULLс набором исключений). Попробуйте перенести код на использование новых макросовPyUnicode_nBYTE_DATA()или используйтеPyUnicode_WRITE()илиPyUnicode_READ().Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование семейства макросов
PyUnicode_nBYTE_DATA().
-
int
PyUnicode_IsIdentifier(PyObject *o)¶ - Part of the Stable ABI.
Верните
1, если строка является допустимым идентификатором согласно определению языка, раздел Идентификаторы и ключевые слова. В противном случае возвращается0.Изменено в версии 3.9: Функция больше не вызывает
Py_FatalError(), если строка не готова.
Свойства символов Юникода¶
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 символом заглавной буквы.
-
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 как «Другой» или «Разделитель», за исключением пробела 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, преобразованный в двойное число. Верните
-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¶
Для создания объектов Unicode и доступа к их основным свойствам последовательности используйте эти API:
-
PyObject *
PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)¶ - Return value: New reference.
Создайте новый объект Unicode. maxchar должно быть истинным максимальным значением кодовой точки, которая будет помещена в строку. В качестве приближения его можно округлить до ближайшего значения в последовательности 127, 255, 65535, 1114111.
Это рекомендуемый способ выделения нового объекта Unicode. Объекты, созданные с помощью этой функции, не изменяют размер.
Добавлено в версии 3.3.
-
PyObject *
PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size)¶ - Return value: New reference.
Создает новый объект Unicode с заданным kind (возможные значения
PyUnicode_1BYTE_KINDи т.д., как возвращаетсяPyUnicode_KIND()). Буфер* должен указывать на массив единиц size размером 1, 2 или 4 байта на символ, в зависимости от вида.Добавлено в версии 3.3.
-
PyObject *
PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)¶ - Return value: New reference. Part of the Stable ABI.
Создайте объект Unicode из буфера char u. Байты будут интерпретированы как кодированные в UTF-8. Буфер копируется в новый объект. Если буфер не
NULL, возвращаемое значение может быть разделяемым объектом, т.е. модификация данных не допускается.Если u равно
NULL, эта функция ведет себя какPyUnicode_FromUnicode()с буфером, установленным вNULL. Это использование устарело в пользуPyUnicode_New(), и будет удалено в Python 3.12.
-
PyObject *
PyUnicode_FromString(const char *u)¶ - Return value: New reference. Part of the Stable ABI.
Создание объекта Unicode из буфера нуль-терминированных символов u в кодировке UTF-8.
-
PyObject *
PyUnicode_FromFormat(const char *format, ...)¶ - Return value: New reference. Part of the Stable ABI.
Принимает строку format в стиле C
printf()- и переменное количество аргументов, вычисляет размер результирующей строки Python Unicode и возвращает строку с форматированными в нее значениями. Переменные аргументы должны быть типа C и точно соответствовать символам формата в ASCII-кодированной строке format. Допустимы следующие символы формата:Символы формата
Тип
Комментарий
%%n/a
Буквальный символ %.
%cint
Один символ, представленный как C int.
%dint
Эквивалентно
printf("%d"). 1%uunsigned int
Эквивалентно
printf("%u"). 1%ldдлинный
Эквивалентно
printf("%ld"). 1%liдлинный
Эквивалентно
printf("%li"). 1%luбеззнаковая длина
Эквивалентно
printf("%lu"). 1%lldдлинный длинный
Эквивалентно
printf("%lld"). 1%lliдлинный длинный
Эквивалентно
printf("%lli"). 1%lluбеззнаковая длина long
Эквивалентно
printf("%llu"). 1%zdЭквивалентно
printf("%zd"). 1%ziЭквивалентно
printf("%zi"). 1%zuразмер_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)¶ - Return value: New reference. Part of the Stable ABI.
Идентичен
PyUnicode_FromFormat()за исключением того, что принимает ровно два аргумента.
-
PyObject *
PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Декодировать закодированный объект obj в объект Unicode.
bytes,bytearrayи другие bytes-like objects декодируются в соответствии с заданным кодированием и с использованием обработки ошибок, определенных ошибками. Оба параметра могут бытьNULL, чтобы интерфейс использовал значения по умолчанию (подробнее см. Встроенные кодеки).Все остальные объекты, включая объекты Unicode, вызывают установку
TypeError.API возвращает
NULL, если произошла ошибка. Вызывающая сторона отвечает за уменьшение возвращаемых объектов.
-
Py_ssize_t
PyUnicode_GetLength(PyObject *unicode)¶ - Part of the Stable ABI since version 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 ссылки.
Возвращает количество записанных символов, или возвращает
-1и вызывает исключение при ошибке.Добавлено в версии 3.3.
-
int
PyUnicode_WriteChar(PyObject *unicode, Py_ssize_t index, Py_UCS4 character)¶ - Part of the Stable ABI since version 3.7.
Запись символа в строку. Строка должна быть создана с помощью
PyUnicode_New(). Поскольку строки Unicode должны быть неизменяемыми, строка не должна быть общей или хэшированной.Эта функция проверяет, что unicode является объектом Unicode, что индекс не выходит за границы, и что объект может быть безопасно изменен (т.е. что количество его ссылок равно единице).
Добавлено в версии 3.3.
-
Py_UCS4
PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index)¶ - Part of the Stable ABI since version 3.7.
Считывание символа из строки. Эта функция проверяет, что unicode является объектом Unicode и индекс не выходит за границы, в отличие от версии макроса
PyUnicode_READ_CHAR().Добавлено в версии 3.3.
-
PyObject *
PyUnicode_Substring(PyObject *str, Py_ssize_t start, Py_ssize_t end)¶ - Return value: New reference. Part of the Stable ABI since version 3.7.
Возвращает подстроку str, начиная с символьного индекса start (включено) до символьного индекса end (исключено). Отрицательные индексы не поддерживаются.
Добавлено в версии 3.3.
-
Py_UCS4 *
PyUnicode_AsUCS4(PyObject *u, Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null)¶ - Part of the Stable ABI since version 3.7.
Копирует строку u в буфер UCS4, включая нулевой символ, если установлено значение copy_null. Возвращает
NULLи устанавливает исключение при ошибке (в частности,SystemError, если buflen меньше длины u). При успехе возвращается buffer.Добавлено в версии 3.3.
-
Py_UCS4 *
PyUnicode_AsUCS4Copy(PyObject *u)¶ - Part of the Stable ABI since version 3.7.
Скопировать строку u в новый буфер UCS4, выделенный с помощью
PyMem_Malloc(). Если это не удается, возвращаетсяNULLс установленнымMemoryError. В возвращаемый буфер всегда добавляется дополнительная нулевая кодовая точка.Добавлено в версии 3.3.
Утратившие силу API Py_UNICODE¶
Deprecated since version 3.3, will be removed in version 3.12.
Эти функции API устарели с внедрением PEP 393. Модули расширения могут продолжать использовать их, так как они не будут удалены в Python 3.x, но должны знать, что их использование теперь может привести к снижению производительности и памяти.
-
PyObject *
PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)¶ - Return value: New reference.
Создать объект Unicode из буфера Py_UNICODE u заданного размера. u может быть
NULL, что приведет к неопределенности содержимого. Пользователь несет ответственность за заполнение необходимых данных. Буфер копируется в новый объект.Если буфер не является
NULL, возвращаемое значение может быть общим объектом. Поэтому модификация результирующего объекта Unicode разрешена только в том случае, если u равенNULL.Если буфер имеет размер
NULL,PyUnicode_READY()должен быть вызван после заполнения содержимого строки перед использованием любого из макросов доступа, таких какPyUnicode_KIND().Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование
PyUnicode_FromKindAndData(),PyUnicode_FromWideChar()илиPyUnicode_New().
-
Py_UNICODE *
PyUnicode_AsUnicode(PyObject *unicode)¶ Возвращает указатель только для чтения на внутренний буфер объекта Unicode
Py_UNICODE, илиNULLпри ошибке. Будет создано представление объекта Py_UNICODE*, если оно еще не доступно. Буфер всегда завершается дополнительной нулевой кодовой точкой. Обратите внимание, что результирующая строкаPy_UNICODEможет также содержать встроенные нулевые точки кода, что приведет к усечению строки при использовании в большинстве функций языка Си.Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование
PyUnicode_AsUCS4(),PyUnicode_AsWideChar(),PyUnicode_ReadChar()или аналогичных новых API.
-
PyObject *
PyUnicode_TransformDecimalToASCII(Py_UNICODE *s, Py_ssize_t size)¶ - Return value: New reference.
Создать объект Unicode путем замены всех десятичных цифр в буфере
Py_UNICODEзаданного размера на ASCII цифры 0–9 в соответствии с их десятичным значением. ВернитеNULL, если произойдет исключение.Deprecated since version 3.3, will be removed in version 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* может содержать встроенные нулевые точки кода, что приведет к усечению строки при использовании в большинстве функций языка Си.Добавлено в версии 3.3.
Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование
PyUnicode_AsUCS4(),PyUnicode_AsWideChar(),PyUnicode_ReadChar()или аналогичных новых API.
-
Py_ssize_t
PyUnicode_GetSize(PyObject *unicode)¶ - Part of the Stable ABI.
Возвращает размер устаревшего представления
Py_UNICODE, в единицах кода (включает суррогатные пары как 2 единицы).Deprecated since version 3.3, will be removed in version 3.12: Часть Unicode API старого образца, пожалуйста, перейдите на использование
PyUnicode_GET_LENGTH().
-
PyObject *
PyUnicode_FromObject(PyObject *obj)¶ - Return value: New reference. Part of the Stable ABI.
При необходимости скопируйте экземпляр подтипа Unicode в новый истинный объект Unicode. Если obj уже является истинным объектом Unicode (не подтипом), верните ссылку с увеличенным значением refcount.
Объекты, отличные от Unicode или его подтипов, вызовут ошибку
TypeError.
Кодирование локали¶
Текущая кодировка локали может быть использована для декодирования текста из операционной системы.
-
PyObject *
PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t len, const char *errors)¶ - Return value: New reference. Part of the Stable ABI since version 3.7.
Декодирование строки из UTF-8 на Android и VxWorks или из текущей кодировки локали на других платформах. Поддерживаемые обработчики ошибок -
"strict"и"surrogateescape"(PEP 383). Декодер использует обработчик ошибок"strict", если errors имеет значениеNULL. str должен заканчиваться нулевым символом, но не может содержать встроенных нулевых символов.Используйте
PyUnicode_DecodeFSDefaultAndSize()для декодирования строки изPy_FileSystemDefaultEncoding(кодировка локали, считываемая при запуске Python).Эта функция игнорирует Python UTF-8 Mode.
См.также
Функция
Py_DecodeLocale().Добавлено в версии 3.3.
Изменено в версии 3.7: Функция теперь также использует текущую кодировку локали для обработчика ошибки
surrogateescape, за исключением Android. Ранее дляPy_DecodeLocale()использовалось :c``surrogateescape``, а дляstrictиспользовалась текущая кодировка локали.
-
PyObject *
PyUnicode_DecodeLocale(const char *str, const char *errors)¶ - Return value: New reference. Part of the Stable ABI since version 3.7.
Аналогично
PyUnicode_DecodeLocaleAndSize(), но длина строки вычисляется с помощьюstrlen().Добавлено в версии 3.3.
-
PyObject *
PyUnicode_EncodeLocale(PyObject *unicode, const char *errors)¶ - Return value: New reference. Part of the Stable ABI since version 3.7.
Кодирование объекта Unicode в UTF-8 на Android и VxWorks или в текущую кодировку локали на других платформах. Поддерживаемые обработчики ошибок -
"strict"и"surrogateescape"(PEP 383). Кодер использует обработчик ошибок"strict", если errors равноNULL. Возвращает объектbytes. unicode не может содержать встроенные нулевые символы.Используйте
PyUnicode_EncodeFSDefault()для кодирования строки вPy_FileSystemDefaultEncoding(кодировка локали, считываемая при запуске Python).Эта функция игнорирует Python UTF-8 Mode.
См.также
Функция
Py_EncodeLocale().Добавлено в версии 3.3.
Изменено в версии 3.7: Функция теперь также использует текущую кодировку локали для обработчика ошибки
surrogateescape, за исключением Android. Ранее дляPy_EncodeLocale()использовалось :c``surrogateescape``, а дляstrictиспользовалась текущая кодировка локали.
Кодирование файловой системы¶
Для кодирования и декодирования имен файлов и других строк окружения следует использовать Py_FileSystemDefaultEncoding в качестве кодировки, а Py_FileSystemDefaultEncodeErrors в качестве обработчика ошибок (PEP 383 и PEP 529). Для кодирования имен файлов в bytes во время разбора аргументов следует использовать конвертер "O&", передавая PyUnicode_FSConverter() в качестве функции преобразования:
-
int
PyUnicode_FSConverter(PyObject *obj, void *result)¶ - Part of the Stable ABI.
Конвертер ParseTuple: кодирует объекты
str– полученные напрямую или через интерфейсos.PathLike– вbytes, используяPyUnicode_EncodeFSDefault(); объектыbytesвыводятся как есть. результат должен быть PyBytesObject*, который должен быть освобожден, когда он больше не используется.Добавлено в версии 3.1.
Изменено в версии 3.6: Принимает path-like object.
Для декодирования имен файлов в str при разборе аргументов следует использовать конвертер "O&", передавая PyUnicode_FSDecoder() в качестве функции преобразования:
-
int
PyUnicode_FSDecoder(PyObject *obj, void *result)¶ - Part of the Stable ABI.
Конвертер ParseTuple: декодирует объекты
bytes– полученные прямо или косвенно через интерфейсos.PathLike– вstr, используяPyUnicode_DecodeFSDefaultAndSize(); объектыstrвыводятся как есть. result должен быть PyUnicodeObject*, который должен быть освобожден, когда он больше не используется.Добавлено в версии 3.2.
Изменено в версии 3.6: Принимает path-like object.
-
PyObject *
PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)¶ - Return value: New reference. Part of the Stable ABI.
Декодирование строки из filesystem encoding and error handler.
Если
Py_FileSystemDefaultEncodingне установлено, вернитесь к кодировке локали.Py_FileSystemDefaultEncodingинициализируется при запуске из кодировки локали и не может быть изменена позже. Если вам нужно декодировать строку из текущей кодировки локали, используйтеPyUnicode_DecodeLocaleAndSize().См.также
Функция
Py_DecodeLocale().Изменено в версии 3.6: Используйте обработчик ошибок
Py_FileSystemDefaultEncodeErrors.
-
PyObject *
PyUnicode_DecodeFSDefault(const char *s)¶ - Return value: New reference. Part of the Stable ABI.
Декодирование нуль-терминированной строки из filesystem encoding and error handler.
Если
Py_FileSystemDefaultEncodingне установлено, вернитесь к кодировке локали.Используйте
PyUnicode_DecodeFSDefaultAndSize(), если вы знаете длину строки.Изменено в версии 3.6: Используйте обработчик ошибок
Py_FileSystemDefaultEncodeErrors.
-
PyObject *
PyUnicode_EncodeFSDefault(PyObject *unicode)¶ - Return value: New reference. Part of the 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 поддержка платформ, которые ее поддерживают:
-
PyObject *
PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size)¶ - Return value: New reference. Part of the Stable ABI.
Создать объект Unicode из
wchar_tбуфера w заданного размера. Передача-1в качестве size означает, что функция должна сама вычислить длину, используя wcslen. При неудаче возвращаетсяNULL.
-
Py_ssize_t
PyUnicode_AsWideChar(PyObject *unicode, wchar_t *w, Py_ssize_t size)¶ - Part of the Stable ABI.
Скопировать содержимое объекта Unicode в буфер w
wchar_t. Копируется не более sizewchar_tсимволов (исключая возможно идущий следом нулевой символ завершения). Возвращается количество скопированныхwchar_tсимволов или-1в случае ошибки. Обратите внимание, что результирующая строка wchar_t* может быть нуль-терминированной или нет. Ответственность за то, чтобы строка wchar_t* была нуль-терминированной, лежит на вызывающей стороне, если этого требует приложение. Также обратите внимание, что строка wchar_t* может содержать нулевые символы, что приведет к усечению строки при использовании с большинством функций языка Си.
-
wchar_t *
PyUnicode_AsWideCharString(PyObject *unicode, Py_ssize_t *size)¶ - Part of the Stable ABI since version 3.7.
Преобразование объекта Unicode в широкую символьную строку. Выходная строка всегда заканчивается нулевым символом. Если size не
NULL, запишите количество широких символов (исключая завершающий нулевой символ) в *size. Обратите внимание, что полученная строкаwchar_tможет содержать нулевые символы, что приведет к усечению строки при использовании с большинством функций языка Си. Если size равенNULL, а строка wchar_t* содержит нулевые символы, то возникает ошибкаValueError.Возвращает буфер, выделенный
PyMem_Alloc()(используйтеPyMem_Free()для его освобождения) при успехе. При ошибке возвращаетсяNULLи *size не определен. При неудачном выделении памяти выдает ошибкуMemoryError.Добавлено в версии 3.2.
Изменено в версии 3.7: Вызывает ошибку
ValueError, если size равенNULLи строка wchar_t* содержит нулевые символы.
Встроенные кодеки¶
Python предоставляет набор встроенных кодеков, которые для скорости написаны на языке C. Все эти кодеки можно напрямую использовать с помощью следующих функций.
Многие из следующих API принимают два аргумента encoding и errors, и имеют ту же семантику, что и встроенный конструктор строковых объектов str().
Установка кодировки в NULL приводит к использованию кодировки по умолчанию, которая является UTF-8. Вызовы файловой системы должны использовать PyUnicode_FSConverter() для кодировки имен файлов. Для этого используется внутренняя переменная Py_FileSystemDefaultEncoding. Эта переменная должна рассматриваться как доступная только для чтения: на некоторых системах она будет указателем на статическую строку, на других она будет изменяться во время выполнения (например, когда приложение вызывает setlocale).
Обработка ошибок задается ошибками, которые также могут быть установлены в значение NULL, означающее использование обработки по умолчанию, определенной для кодека. Обработка ошибок по умолчанию для всех встроенных кодеков - «строгая» (поднимается ValueError).
Все кодеки используют схожий интерфейс. Для простоты документируются только отклонения от следующих общих.
Общие кодеки¶
Это общие API кодеков:
-
PyObject *
PyUnicode_Decode(const char *s, Py_ssize_t size, const char *encoding, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Создать объект Unicode путем декодирования size байтов закодированной строки s. encoding и errors имеют то же значение, что и одноименные параметры во встроенной функции
str(). Используемый кодек ищется с помощью реестра кодеков Python. ВозвращаетсяNULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Кодирует объект Unicode и возвращает результат в виде объекта Python bytes. Параметры encoding и errors имеют то же значение, что и одноименные параметры в методе Unicode
encode(). Используемый кодек ищется с помощью реестра кодеков Python. ВозвращаетсяNULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_Encode(const Py_UNICODE *s, Py_ssize_t size, const char *encoding, const char *errors)¶ - Return value: New reference.
Кодирует
Py_UNICODEбуфер s заданного размера и возвращает объект Python bytes. Параметры encoding и errors имеют то же значение, что и одноименные параметры в методе Unicodeencode(). Используемый кодек ищется с помощью реестра кодеков Python. ВозвращаетсяNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsEncodedString().
Кодеки UTF-8¶
Это API кодеков UTF-8:
-
PyObject *
PyUnicode_DecodeUTF8(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the 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)¶ - Return value: New reference. Part of the Stable ABI.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeUTF8(). Если consumed неNULL, то неполные последовательности байтов UTF-8 не будут рассматриваться как ошибка. Эти байты не будут декодированы, а количество байтов, которые были декодированы, будет сохранено в consumed.
-
PyObject *
PyUnicode_AsUTF8String(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Кодирует объект Unicode с помощью UTF-8 и возвращает результат в виде объекта Python bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.
-
const char *
PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)¶ - Part of the Stable ABI since version 3.10.
Возвращает указатель на кодировку UTF-8 объекта Unicode и сохраняет размер кодированного представления (в байтах) в size. Аргумент size может быть
NULL; в этом случае размер не сохраняется. В возвращаемый буфер всегда добавляется дополнительный нулевой байт (не включенный в size), независимо от наличия других нулевых кодовых точек.В случае ошибки возвращается
NULLс установленным исключением и не сохраняется размер.Это кэширует UTF-8 представление строки в объекте Unicode, и последующие вызовы будут возвращать указатель на тот же буфер. Вызывающая сторона не несет ответственности за деаллокацию буфера. Буфер деаллоцируется, а указатели на него становятся недействительными при сборке мусора объекта Unicode.
Добавлено в версии 3.3.
Изменено в версии 3.7: Тип возврата теперь
const char *, а неchar *.Изменено в версии 3.10: Эта функция является частью limited 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)¶ - Return value: New reference.
Кодирует
Py_UNICODEбуфер s заданного размера с использованием UTF-8 и возвращает объект Python bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsUTF8String(),PyUnicode_AsUTF8AndSize()илиPyUnicode_AsEncodedString().
Кодеки UTF-32¶
Это API кодеков UTF-32:
-
PyObject *
PyUnicode_DecodeUTF32(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶ - Return value: New reference. Part of the 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)¶ - Return value: New reference. Part of the Stable ABI.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeUTF32(). Если consumed неNULL, тоPyUnicode_DecodeUTF32Stateful()не будет рассматривать неполные последовательности байтов UTF-32 (например, число байтов, не кратное четырем) как ошибку. Эти байты не будут декодированы, а количество байт, которые были декодированы, будет сохранено в consumed.
-
PyObject *
PyUnicode_AsUTF32String(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает байтовую строку Python, используя кодировку UTF-32 в собственном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок «строгая». Возвращается
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶ - Return value: New reference.
Возвращает объект Python bytes, содержащий закодированное в UTF-32 значение данных Unicode в s. Выходные данные записываются в соответствии со следующим порядком байтов:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
Если порядок байтов
0, выходная строка всегда начинается с метки BOM Юникода (U+FEFF). В двух других режимах метка BOM не добавляется.Если
Py_UNICODE_WIDEне определено, суррогатные пары будут выводиться как одна кодовая точка.Возвращает
NULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsUTF32String()илиPyUnicode_AsEncodedString().
Кодеки UTF-16¶
Это API кодеков UTF-16:
-
PyObject *
PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶ - Return value: New reference. Part of the 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)¶ - Return value: New reference. Part of the Stable ABI.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeUTF16(). Если consumed неNULL, тоPyUnicode_DecodeUTF16Stateful()не будет рассматривать неполные последовательности байтов UTF-16 (такие как нечетное количество байтов или разделенная суррогатная пара) как ошибку. Эти байты не будут декодированы, а количество байтов, которые были декодированы, будет сохранено в consumed.
-
PyObject *
PyUnicode_AsUTF16String(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает байтовую строку Python, используя кодировку UTF-16 в собственном порядке байтов. Строка всегда начинается с метки BOM. Обработка ошибок «строгая». Возвращается
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶ - Return value: New reference.
Возвращает объект Python bytes, содержащий закодированное в UTF-16 значение данных Unicode в s. Выходные данные записываются в соответствии со следующим порядком байтов:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
Если порядок байтов
0, выходная строка всегда начинается с метки BOM Юникода (U+FEFF). В двух других режимах метка BOM не добавляется.Если
Py_UNICODE_WIDEопределено, то одно значениеPy_UNICODEможет быть представлено как суррогатная пара. Если он не определен, каждое значениеPy_UNICODEинтерпретируется как символ UCS-2.Возвращает
NULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsUTF16String()илиPyUnicode_AsEncodedString().
Кодеки UTF-7¶
Это API кодеков UTF-7:
-
PyObject *
PyUnicode_DecodeUTF7(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the 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)¶ - Return value: New reference. Part of the Stable ABI.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeUTF7(). Если consumed неNULL, то неполные трейлинговые секции UTF-7 base-64 не будут рассматриваться как ошибка. Эти байты не будут декодированы, а количество байтов, которые были декодированы, будет сохранено в consumed.
-
PyObject *
PyUnicode_EncodeUTF7(const Py_UNICODE *s, Py_ssize_t size, int base64SetO, int base64WhiteSpace, const char *errors)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с использованием UTF-7 и возвращает объект Python bytes. ВернитеNULL, если кодек вызвал исключение.Если base64SetO ненулевое, то «набор O» (пунктуация, не имеющая другого специального значения) будет закодирован в base-64. Если base64WhiteSpace ненулевое, пробельные символы будут закодированы в base-64. Для кодека Python «utf-7» оба значения равны нулю.
Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsEncodedString().
Кодеки Unicode-Escape¶
Это API кодека «Unicode Escape»:
-
PyObject *
PyUnicode_DecodeUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Создать объект Unicode путем декодирования size байт кодированной Unicode-Escape строки s. Вернуть
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsUnicodeEscapeString(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Закодируйте объект Unicode с помощью Unicode-Escape и верните результат в виде объекта bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с использованием Unicode-Escape и возвращает объект bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsUnicodeEscapeString().
Кодеки Raw-Unicode-Escape¶
Это API кодека «Raw Unicode Escape»:
-
PyObject *
PyUnicode_DecodeRawUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Создать объект Unicode путем декодирования size байт закодированной Raw-Unicode-Escape строки s. Возвращает
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Закодируйте объект Unicode с помощью Raw-Unicode-Escape и верните результат в виде объекта bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с использованием Raw-Unicode-Escape и возвращает объект bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsRawUnicodeEscapeString()илиPyUnicode_AsEncodedString().
Кодеки Latin-1¶
Это API кодеков с кодировкой Latin-1: Latin-1 соответствует первым 256 ординалам Unicode, и только они принимаются кодеками при кодировании.
-
PyObject *
PyUnicode_DecodeLatin1(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Создать объект Unicode путем декодирования size байт строки s в кодировке Latin-1. Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsLatin1String(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Закодируйте объект Unicode с помощью Latin-1 и верните результат в виде объекта Python bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с использованием Latin-1 и возвращает объект Python bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsLatin1String()илиPyUnicode_AsEncodedString().
Кодеки ASCII¶
Это API кодеков ASCII. Принимаются только 7-битные данные ASCII. Все остальные коды генерируют ошибки.
-
PyObject *
PyUnicode_DecodeASCII(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the Stable ABI.
Создать объект Unicode путем декодирования size байт ASCII-кодированной строки s. Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_AsASCIIString(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI.
Кодирует объект Unicode с помощью ASCII и возвращает результат в виде объекта Python bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с использованием ASCII и возвращает объект Python bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsASCIIString()илиPyUnicode_AsEncodedString().
Кодеки карты символов¶
Этот кодек особенен тем, что его можно использовать для реализации множества различных кодеков (что, собственно, и было сделано для получения большинства стандартных кодеков, включенных в пакет encodings). Кодек использует отображения для кодирования и декодирования символов. Предоставляемые объекты отображения должны поддерживать интерфейс отображения __getitem__(); хорошо работают словари и последовательности.
Это API кодеков отображения:
-
PyObject *
PyUnicode_DecodeCharmap(const char *data, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Return value: New reference. Part of the 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)¶ - Return value: New reference. Part of the Stable ABI.
Кодирует объект Unicode, используя заданный объект mapping, и возвращает результат в виде объекта bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.Объект mapping должен отображать целые порядковые числа Unicode на объекты байтов, целые числа в диапазоне от 0 до 255 или
None. Не отображенные ординалы символов (те, которые вызываютLookupError), а также отображенные вNoneрассматриваются как «неопределенное отображение» и вызывают ошибку.
-
PyObject *
PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с использованием заданного объекта mapping и возвращает результат в виде объекта bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsCharmapString()илиPyUnicode_AsEncodedString().
Следующий API кодека особенен тем, что сопоставляет Unicode с Unicode.
-
PyObject *
PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)¶ - Return value: New reference. Part of the 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)¶ - Return value: New reference.
Перевести буфер
Py_UNICODEзаданного размера, применив к нему таблицу отображения символов, и вернуть полученный объект Unicode. ВозвращаетNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 3.11: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_Translate(). или generic codec based API
Кодеки MBCS для Windows¶
Это API кодеков MBCS. В настоящее время они доступны только в Windows и используют конвертеры Win32 MBCS для осуществления преобразований. Обратите внимание, что MBCS (или DBCS) - это класс кодировок, а не одна из них. Целевая кодировка определяется настройками пользователя на машине, на которой работает кодек.
-
PyObject *
PyUnicode_DecodeMBCS(const char *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference. Part of the Stable ABI on Windows since version 3.7.
Создать объект Unicode путем декодирования size байт MBCS-кодированной строки s. Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_DecodeMBCSStateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶ - Return value: New reference. Part of the Stable ABI on Windows since version 3.7.
Если consumed равно
NULL, ведет себя какPyUnicode_DecodeMBCS(). Если consumed неNULL, тоPyUnicode_DecodeMBCSStateful()не будет декодировать ведущий байт, а количество байт, которые были декодированы, будет сохранено в consumed.
-
PyObject *
PyUnicode_AsMBCSString(PyObject *unicode)¶ - Return value: New reference. Part of the Stable ABI on Windows since version 3.7.
Кодируйте объект Unicode с помощью MBCS и возвращайте результат в виде объекта Python bytes. Обработка ошибок «строгая». Верните
NULL, если кодек вызвал исключение.
-
PyObject *
PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, const char *errors)¶ - Return value: New reference. Part of the Stable ABI on Windows since version 3.7.
Кодирует объект Unicode с использованием указанной кодовой страницы и возвращает объект Python bytes. Верните
NULL, если кодек вызвал исключение. Используйте кодовую страницуCP_ACPдля получения кодека MBCS.Добавлено в версии 3.3.
-
PyObject *
PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Return value: New reference.
Кодирует буфер
Py_UNICODEзаданного размера с помощью MBCS и возвращает объект Python bytes. ВернитеNULL, если кодек вызвал исключение.Deprecated since version 3.3, will be removed in version 4.0: Часть API старого образца
Py_UNICODE; пожалуйста, перейдите на использованиеPyUnicode_AsMBCSString(),PyUnicode_EncodeCodePage()илиPyUnicode_AsEncodedString().
Методы и слоты¶
Методы и функции слотов¶
Следующие API способны обрабатывать объекты Unicode и строки на входе (в описаниях мы называем их строками) и возвращать объекты Unicode или целые числа в зависимости от ситуации.
Все они возвращают NULL или -1 в случае возникновения исключения.
-
PyObject *
PyUnicode_Concat(PyObject *left, PyObject *right)¶ - Return value: New reference. Part of the Stable ABI.
Конкатенация двух строк с получением новой строки Unicode.
-
PyObject *
PyUnicode_Split(PyObject *s, PyObject *sep, Py_ssize_t maxsplit)¶ - Return value: New reference. Part of the Stable ABI.
Разделяет строку, давая список строк Unicode. Если sep равно
NULL, то разбиение будет производиться по всем пробельным подстрокам. В противном случае, разбиение происходит по заданному разделителю. Будет выполнено не более maxsplit разбиений. Если значение отрицательно, ограничение не устанавливается. Разделители не включаются в результирующий список.
-
PyObject *
PyUnicode_Splitlines(PyObject *s, int keepend)¶ - Return value: New reference. Part of the Stable ABI.
Разделяет строку Unicode на переносы строк, возвращая список строк Unicode. CRLF считается одним переводом строки. Если keepend имеет значение
0, символы перевода строки не включаются в результирующие строки.
-
PyObject *
PyUnicode_Join(PyObject *separator, PyObject *seq)¶ - Return value: New reference. Part of the Stable ABI.
Объединить последовательность строк с помощью заданного разделителя и вернуть результирующую строку Unicode.
-
Py_ssize_t
PyUnicode_Tailmatch(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶ - Part of the 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)¶ - Part of the Stable ABI.
Возвращает первую позицию substr в
str[start:end], используя заданное направление (направление ==1означает прямой поиск, направление ==-1- обратный поиск). Возвращаемое значение - индекс первого совпадения; значение-1означает, что совпадение не было найдено, а-2означает, что произошла ошибка и было установлено исключение.
-
Py_ssize_t
PyUnicode_FindChar(PyObject *str, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int direction)¶ - Part of the Stable ABI since version 3.7.
Возвращает первую позицию символа ch в
str[start:end], используя заданное направление (направление ==1означает прямой поиск, направление ==-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)¶ - Part of the Stable ABI.
Возвращает количество непересекающихся вхождений substr в
str[start:end]. Верните-1, если произошла ошибка.
-
PyObject *
PyUnicode_Replace(PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)¶ - Return value: New reference. Part of the Stable ABI.
Заменить не более maxcount вхождений substr в str на replstr и вернуть полученный объект Unicode. maxcount ==
-1означает замену всех вхождений.
-
int
PyUnicode_Compare(PyObject *left, PyObject *right)¶ - Part of the Stable ABI.
Сравнить две строки и вернуть
-1,0,1для меньше чем, равно и больше чем, соответственно.Эта функция возвращает
-1при неудаче, поэтому для проверки ошибок следует вызватьPyErr_Occurred().
-
int
PyUnicode_CompareWithASCIIString(PyObject *uni, const char *string)¶ - Part of the Stable ABI.
Сравнивает объект Unicode, uni, с string и возвращает
-1,0,1для less than, equal и greater than, соответственно. Лучше всего передавать только ASCII-кодированные строки, но функция интерпретирует входную строку как ISO-8859-1, если она содержит не ASCII-символы.Эта функция не вызывает исключений.
-
PyObject *
PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)¶ - Return value: New reference. Part of the Stable ABI.
Rich сравнивает две строки 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)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает новый строковый объект из format и args; это аналогично
format % args.
-
int
PyUnicode_Contains(PyObject *container, PyObject *element)¶ - Part of the Stable ABI.
Проверяет, содержится ли элемент в контейнере, и возвращает true или false соответственно.
элемент должен быть преобразован в одноэлементную строку Unicode. Если произошла ошибка, возвращается
-1.
-
void
PyUnicode_InternInPlace(PyObject **string)¶ - Part of the Stable ABI.
Вставляет аргумент *string на место. Аргумент должен быть адресом переменной-указателя, указывающей на строковый объект Python Unicode. Если уже существует интернированная строка, которая совпадает с *string, она устанавливает *string на нее (уменьшая счетчик ссылок старого объекта строки и увеличивая счетчик ссылок интернированного объекта строки), иначе она оставляет *string в покое и интернирует его (увеличивая его счетчик ссылок). (Пояснение: несмотря на то, что много говорят о количестве ссылок, считайте эту функцию нейтральной по отношению к количеству ссылок; вы владеете объектом после вызова, если и только если вы владели им до вызова).
-
PyObject *
PyUnicode_InternFromString(const char *v)¶ - Return value: New reference. Part of the Stable ABI.
Комбинация
PyUnicode_FromString()иPyUnicode_InternInPlace(), возвращающая либо новый интернированный строковый объект Unicode, либо новую («принадлежащую») ссылку на ранее интернированный строковый объект с тем же значением.