Содержание страницы
Объекты Unicode и кодеки¶Unicode Objects and Codecs
Объекты Unicode¶Unicode Objects
Тип Unicode¶Unicode Type
Это основные типы объектов Unicode, используемые в реализации Unicode в Python:
-
Py_UNICODE¶ Этот тип представляет собой тип хранения, который используется внутри Python для хранения кодовых точек Unicode. В сборках Python по умолчанию для
Py_UNICODEиспользуется 16-битный тип, и значения Unicode хранятся внутри как UCS2. Также можно собрать версию Python UCS4 (большинство современных дистрибутивов Linux поставляются со сборками Python UCS4). В этих сборках дляPy_UNICODEиспользуется 32-битный тип, и данные Unicode хранятся внутри как UCS4. На платформах, гдеwchar_tдоступен и совместим с выбранным вариантом сборки Unicode Python,Py_UNICODEявляется псевдонимом typedef дляwchar_tдля повышения совместимости с родной платформой. На всех остальных платформахPy_UNICODEявляется псевдонимом typedef дляunsigned short(UCS2) илиunsigned long(UCS4).
Обратите внимание, что сборки Python с UCS2 и UCS4 не являются двоично совместимыми. Учитывайте это при написании расширений или интерфейсов.
-
PyTypeObject
PyUnicode_Type¶ Этот экземпляр
PyTypeObjectпредставляет тип Unicode Python. Он доступен в коде Python какunicodeиtypes.UnicodeType.
Следующие API на самом деле являются макросами C и могут использоваться для быстрых проверок и доступа к внутренним данным Unicode объектов только для чтения:
-
int
PyUnicode_Check(PyObject *o)¶ Возвращает true, если объект o является объектом Unicode или экземпляром подтипа Unicode.
Изменено в версии 2.2: Теперь допускаются подтипы.
-
int
PyUnicode_CheckExact(PyObject *o)¶ Возвращает true, если объект o является объектом Unicode, но не экземпляром подтипа.
Новое в версии 2.2.
-
Py_ssize_t
PyUnicode_GET_SIZE(PyObject *o)¶ Возвращает размер объекта. o должен быть
PyUnicodeObject(не проверяется).Изменено в версии 2.5: Эта функция возвращала тип
int. Возможно, потребуется внести изменения в код для корректной поддержки 64-битных систем.
-
Py_ssize_t
PyUnicode_GET_DATA_SIZE(PyObject *o)¶ Возвращает размер внутреннего буфера объекта в байтах. o должен быть
PyUnicodeObject(не проверяется).Изменено в версии 2.5: Эта функция возвращала тип
int. Возможно, потребуется внести изменения в код для корректной поддержки 64-битных систем.
-
Py_UNICODE*
PyUnicode_AS_UNICODE(PyObject*o)¶ Возвращает указатель на внутренний буфер
Py_UNICODEобъекта. o должен бытьPyUnicodeObject(не проверяется).
-
const char*
PyUnicode_AS_DATA(PyObject*o)¶ Возвращает указатель на внутренний буфер объекта. o должен быть
PyUnicodeObject(не проверяется).
-
int
PyUnicode_ClearFreeList()¶ Очищает список свободных элементов. Возвращает общее количество освобождённых элементов.
Новое в версии 2.6.
Свойства символов Unicode¶Unicode Character Properties
Unicode предоставляет множество различных свойств символов. Наиболее востребованные из них доступны через следующие макросы, которые сопоставляются с функциями на C в зависимости от конфигурации Python.
-
int
Py_UNICODE_ISSPACE(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch пробельным символом.
-
int
Py_UNICODE_ISLOWER(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом в нижнем регистре.
-
int
Py_UNICODE_ISUPPER(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом в верхнем регистре.
-
int
Py_UNICODE_ISTITLE(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом в регистре заголовка (titlecase).
-
int
Py_UNICODE_ISLINEBREAK(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch символом разрыва строки.
-
int
Py_UNICODE_ISDECIMAL(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch десятичным символом.
-
int
Py_UNICODE_ISDIGIT(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch цифровым символом.
-
int
Py_UNICODE_ISNUMERIC(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch числовым символом.
-
int
Py_UNICODE_ISALPHA(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch буквенным символом.
-
int
Py_UNICODE_ISALNUM(Py_UNICODE ch)¶ Возвращает
1или0в зависимости от того, является ли ch буквенно-цифровым символом.
Эти API можно использовать для быстрых прямых преобразований символов:
-
Py_UNICODE
Py_UNICODE_TOLOWER(Py_UNICODE ch)¶ Возвращает символ ch, преобразованный в нижний регистр.
-
Py_UNICODE
Py_UNICODE_TOUPPER(Py_UNICODE ch)¶ Возвращает символ ch, преобразованный в верхний регистр.
-
Py_UNICODE
Py_UNICODE_TOTITLE(Py_UNICODE ch)¶ Возвращает символ ch, приведённый к регистру заголовка.
-
int
Py_UNICODE_TODECIMAL(Py_UNICODE ch)¶ Возвращает символ ch, преобразованный в десятичное положительное целое. Возвращает
-1, если это невозможно. Этот макрос не вызывает исключений.
-
int
Py_UNICODE_TODIGIT(Py_UNICODE ch)¶ Возвращает символ ch, преобразованный в целое однозначное число. Возвращает
-1, если это невозможно. Этот макрос не вызывает исключений.
-
double
Py_UNICODE_TONUMERIC(Py_UNICODE ch)¶ Возвращает символ ch, преобразованный в double. Возвращает
-1.0, если это невозможно. Этот макрос не вызывает исключений.
Простой Py_UNICODE¶Plain Py_UNICODE
Для создания объектов Unicode и доступа к их базовым свойствам последовательности используйте следующие API:
-
PyObject*
PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode из буфера Py_UNICODE u указанного размера. u может быть NULL, что делает содержимое неопределённым. Ответственность за заполнение нужными данными лежит на пользователе. Буфер копируется в новый объект. Если буфер не равен NULL, возвращаемое значение может быть разделяемым объектом. Поэтому изменение результирующего объекта Unicode допускается только когда u равно NULL.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode из буфера char u. Байты интерпретируются как кодировка UTF-8. u также может быть NULL, что делает содержимое неопределённым. Ответственность за заполнение нужными данными лежит на пользователе. Буфер копируется в новый объект. Если буфер не равен NULL, возвращаемое значение может быть разделяемым объектом. Поэтому изменение результирующего объекта Unicode допускается только когда u равно NULL.
Новое в версии 2.6.
-
PyObject *
PyUnicode_FromString(const char *u)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode из UTF-8-закодированного нуль-терминированного буфера символов u.
Новое в версии 2.6.
-
PyObject*
PyUnicode_FromFormat(const char *format, ...)¶ - Возвращаемое значение: новая ссылка.
Принимает строку формата в стиле C
printf()формата и переменное количество аргументов, вычисляет размер результирующей строки Python unicode и возвращает строку с отформатированными значениями. Переменные аргументы должны быть типами C и должны точно соответствовать символам формата в строке формата. Допускаются следующие символы формата:Символы формата
Тип
Описание
%%н/д
Буквальный символ %.
%cint
Один символ, представленный как C int.
%dint
Полностью эквивалентно
printf("%d").%uбеззнаковый int
Полностью эквивалентно
printf("%u").%ldlong
Полностью эквивалентно
printf("%ld").%luбеззнаковый long
Полностью эквивалентно
printf("%lu").%zdPy_ssize_t
Полностью эквивалентно
printf("%zd").%zusize_t
Полностью эквивалентно
printf("%zu").%iint
Полностью эквивалентно
printf("%i").%xint
Полностью эквивалентно
printf("%x").%schar*
Нуль-терминированный массив символов C.
%pvoid*
Шестнадцатеричное представление указателя C. В основном эквивалентно
printf("%p"), за исключением того, что гарантированно начинается с литерала0xнезависимо от того, что возвращаетprintfна данной платформе.%UPyObject*
Unicode-объект.
%VPyObject*, char *
Unicode-объект (может быть NULL) и завершающийся нулевым символом C-массив символов в качестве второго параметра (используется, если первый параметр равен NULL).
%SPyObject*
Результат вызова
PyObject_Unicode().%RPyObject*
Результат вызова
PyObject_Repr().Нераспознанный символ формата приводит к тому, что вся оставшаяся строка формата копируется как есть в результирующую строку, а все лишние аргументы отбрасываются.
Новое в версии 2.6.
-
PyObject*
PyUnicode_FromFormatV(const char *format, va_list vargs)¶ - Возвращаемое значение: новая ссылка.
Идентично
PyUnicode_FromFormat(), за исключением того, что принимает ровно два аргумента.Новое в версии 2.6.
-
Py_UNICODE*
PyUnicode_AsUnicode(PyObject *unicode)¶ Возвращает указатель только для чтения на внутренний буфер
Py_UNICODEобъекта Unicode, NULL, если unicode не является объектом Unicode. Обратите внимание, что результирующая строкаPy_UNICODE*может содержать встроенные нулевые символы, что приведёт к усечению строки при использовании в большинстве функций C.
-
Py_ssize_t
PyUnicode_GetSize(PyObject *unicode)¶ Возвращает длину объекта Unicode.
Изменено в версии 2.5: Эта функция возвращала тип
int. Возможно, потребуется внести изменения в код для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Приводит закодированный объект obj к объекту Unicode и возвращает ссылку с увеличенным счётчиком ссылок.
Строки и другие объекты, совместимые с символьными буферами, декодируются в соответствии с заданной кодировкой и с использованием обработки ошибок, определённой параметром errors. Оба параметра могут быть NULL, чтобы интерфейс использовал значения по умолчанию (подробнее см. следующий раздел).
Все остальные объекты, включая объекты Unicode, приводят к установке
TypeError.API возвращает NULL при ошибке. Вызывающий отвечает за уменьшение счётчика ссылок возвращённых объектов.
-
PyObject*
PyUnicode_FromObject(PyObject *obj)¶ - Возвращаемое значение: новая ссылка.
Сокращение для
PyUnicode_FromEncodedObject(obj, NULL, "strict"), которое используется во всём интерпретаторе, когда требуется приведение к Unicode.
Если платформа поддерживает wchar_t и предоставляет заголовочный файл wchar.h, Python может напрямую взаимодействовать с этим типом, используя следующие функции. Поддержка оптимизирована, если собственный тип Python Py_UNICODE идентичен системному wchar_t.
Поддержка wchar_t¶wchar_t Support
wchar_t поддержка на платформах, которые её поддерживают:
-
PyObject*
PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode из буфера
wchar_tw заданного размера. Возвращает NULL в случае ошибки.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
Py_ssize_t
PyUnicode_AsWideChar(PyUnicodeObject *unicode, wchar_t *w, Py_ssize_t size)¶ Копирует содержимое объекта Unicode в буфер
wchar_tw. Копируется не более size символовwchar_t(исключая возможный завершающий нулевой символ). Возвращает количество скопированных символовwchar_tили-1в случае ошибки. Обратите внимание, что результирующая строкаwchar_tможет быть или не быть завершена нулём. Ответственность вызывающего – убедиться, что строкаwchar_tзавершена нулём, если это требуется приложением. Также обратите внимание, что строкаwchar_t*может содержать нулевые символы, что приведёт к усечению строки при использовании с большинством функций C.Изменено в версии 2.5: Эта функция возвращала тип
intи использовала типintдля size. Это может потребовать изменений в вашем коде для правильной поддержки 64-битных систем.
Встроенные кодеки¶Built-in Codecs
Python предоставляет набор встроенных кодеков, написанных на C для скорости. Все эти кодеки могут использоваться напрямую через следующие функции.
Многие из следующих API принимают два аргумента: encoding и errors, и имеют ту же семантику, что и аргументы встроенного конструктора объекта Unicode unicode().
Установка кодировки в NULL приводит к использованию кодировки по умолчанию, а именно ASCII. Системные вызовы файловой системы должны использовать Py_FileSystemDefaultEncoding в качестве кодировки для имён файлов. Эту переменную следует рассматривать как доступную только для чтения: в некоторых системах это будет указатель на статическую строку, в других она будет изменяться во время выполнения (например, когда приложение вызывает setlocale).
Обработка ошибок задаётся параметром errors, который также может быть установлен в NULL, что означает использование обработки по умолчанию, определённой для кодека. Обработка ошибок по умолчанию для всех встроенных кодеков – «strict» (возбуждается ValueError).
Все кодеки используют похожий интерфейс. Для простоты документированы только отклонения от следующего общего описания.
Общие кодеки¶Generic Codecs
Это общие API кодеков:
-
PyObject*
PyUnicode_Decode(const char *s, Py_ssize_t size, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode путём декодирования size байт закодированной строки s. encoding и errors имеют тот же смысл, что и одноимённые параметры во встроенной функции
unicode(). Используемый кодек ищется с помощью реестра кодеков Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_Encode(const Py_UNICODE *s, Py_ssize_t size, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEs заданного размера size и возвращает объект строки Python. encoding и errors имеют тот же смысл, что и одноимённые параметры в методе Unicodeencode(). Используемый кодек ищется в реестре кодеков Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует объект Unicode и возвращает результат в виде объекта строки Python. encoding и errors имеют тот же смысл, что и одноимённые параметры в методе Unicode
encode(). Используемый кодек ищется в реестре кодеков Python. Возвращает NULL, если кодек возбудил исключение.
Кодеки UTF-8¶UTF-8 Codecs
Это API кодеков UTF-8:
-
PyObject*
PyUnicode_DecodeUTF8(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode путём декодирования size байт строки, закодированной в UTF-8, s. Возвращает NULL, если кодек возбудил исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_DecodeUTF8Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка.
Если consumed равно NULL, ведёт себя как
PyUnicode_DecodeUTF8(). Если consumed не равно NULL, концевые неполные последовательности байт UTF-8 не будут считаться ошибкой. Эти байты не будут декодированы, а количество байт, которые были декодированы, будет сохранено в consumed.Новое в версии 2.4.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeUTF8(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEs заданного размера size с помощью UTF-8 и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки UTF-32¶UTF-32 Codecs
Это API кодеков UTF-32:
-
PyObject*
PyUnicode_DecodeUTF32(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶ Декодирует 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 устанавливается в текущий порядок байтов в конце входных данных.
В сборке с узкими символами (narrow build) кодовые точки за пределами BMP будут декодированы как суррогатные пары.
Если byteorder равен NULL, кодек запускается в режиме собственного порядка байтов.
Возвращает NULL, если кодек сгенерировал исключение.
Новое в версии 2.6.
-
PyObject*
PyUnicode_DecodeUTF32Stateful(const char *s, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)¶ Если consumed равен NULL, ведёт себя как
PyUnicode_DecodeUTF32(). Если consumed не равен NULL,PyUnicode_DecodeUTF32Stateful()не будет считать неполные завершающие последовательности байт UTF-32 (например, количество байт, не кратное четырём) ошибкой. Эти байты не будут декодированы, а количество декодированных байт будет сохранено в consumed.Новое в версии 2.6.
-
PyObject*
PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶ Возвращает объект Python bytes, содержащий значение Unicode-данных из s, закодированное в UTF-32. Вывод записывается в соответствии со следующим порядком байтов:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
Если
0, выходная строка всегда начинается с метки BOM Unicode (U+FEFF). В двух других режимах метка BOM не добавляется.Если Py_UNICODE_WIDE не определён, суррогатные пары будут выводиться как одна кодовая точка.
Возвращает NULL, если кодек сгенерировал исключение.
Новое в версии 2.6.
Кодеки UTF-32¶UTF-16 Codecs
Это API кодеков UTF-32:
-
PyObject*
PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶ - Возвращаемое значение: новая ссылка.
Декодирует 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, если кодек сгенерировал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_DecodeUTF16Stateful(const char *s, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)¶ - Возвращаемое значение: новая ссылка.
Если consumed равен NULL, ведёт себя как
PyUnicode_DecodeUTF16(). Если consumed не равен NULL,PyUnicode_DecodeUTF16Stateful()не будет считать неполные завершающие последовательности байт UTF-16 (например, нечётное количество байт или разделённую суррогатную пару) ошибкой. Эти байты не будут декодированы, а количество декодированных байт будет сохранено в consumed.Новое в версии 2.4.
Изменено в версии 2.5: Эта функция использовала тип
intдля size и типint *для consumed. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶ - Возвращаемое значение: новая ссылка.
Возвращает объект строки Python, содержащий значение в кодировке UTF-16 для данных Unicode в s. Вывод записывается в следующем порядке байтов:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
Если
0, выходная строка всегда начинается с метки BOM Unicode (U+FEFF). В двух других режимах метка BOM не добавляется.Если Py_UNICODE_WIDE определён, одно значение
Py_UNICODEможет быть представлено как суррогатная пара. Если он не определён, каждое значениеPy_UNICODEинтерпретируется как символ UCS-2.Возвращает NULL, если кодек сгенерировал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки UTF-7¶UTF-7 Codecs
Это API кодеков UTF-7:
-
PyObject*
PyUnicode_DecodeUTF7(const char *s, Py_ssize_t size, const char *errors)¶ Создаёт объект Unicode путём декодирования size байт строки в кодировке UTF-7 s. Возвращает NULL, если кодек сгенерировал исключение.
-
PyObject*
PyUnicode_DecodeUTF7Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶ Если consumed равен NULL, ведёт себя как
PyUnicode_DecodeUTF7(). Если consumed не равен NULL, завершающие неполные секции base-64 UTF-7 не будут считаться ошибкой. Эти байты не будут декодированы, а количество декодированных байт будет сохранено в consumed.
-
PyObject*
PyUnicode_EncodeUTF7(const Py_UNICODE *s, Py_ssize_t size, int base64SetO, int base64WhiteSpace, const char *errors)¶ Кодирует буфер
Py_UNICODEзаданного размера с использованием UTF-7 и возвращает объект Python bytes. Возвращает NULL, если кодек сгенерировал исключение.Если base64SetO не равно нулю, «Set O» (знаки препинания, не имеющие иного особого значения) будут закодированы в base-64. Если base64WhiteSpace не равно нулю, пробельные символы будут закодированы в base-64. Оба параметра установлены в ноль для кодека Python «utf-7».
Кодеки Unicode-Escape¶Unicode-Escape Codecs
Это API кодеков «Unicode Escape»:
-
PyObject*
PyUnicode_DecodeUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode путём декодирования size байт строки в кодировке Unicode-Escape s. Возвращает NULL, если кодек сгенерировал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера size с помощью Unicode-Escape и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки Raw-Unicode-Escape¶Raw-Unicode-Escape Codecs
Это API кодеков «Raw Unicode Escape»:
-
PyObject*
PyUnicode_DecodeRawUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode путём декодирования size байт строки s, закодированной в Raw-Unicode-Escape. Возвращает NULL, если кодек вызвал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера size с помощью Raw-Unicode-Escape и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки Latin-1¶Latin-1 Codecs
Это API кодеков Latin-1: Latin-1 соответствует первым 256 кодовым позициям Unicode, и только они принимаются кодеками при кодировании.
-
PyObject*
PyUnicode_DecodeLatin1(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode путём декодирования size байт строки s, закодированной в Latin-1. Возвращает NULL, если кодек вызвал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера size с помощью Latin-1 и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки ASCII¶ASCII Codecs
Это API кодеков ASCII. Принимаются только 7-битные данные ASCII. Все остальные коды вызывают ошибки.
-
PyObject*
PyUnicode_DecodeASCII(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode путём декодирования size байт строки s, закодированной в ASCII. Возвращает NULL, если кодек вызвал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера size с помощью ASCII и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки с таблицей символов¶Character Map Codecs
Этот кодек особенный тем, что его можно использовать для реализации многих различных кодеков (и именно так были получены большинство стандартных кодеков, входящих в пакет encodings). Кодек использует отображение для кодирования и декодирования символов.
Отображения для декодирования должны сопоставлять отдельные символы строки отдельным символам Unicode, целым числам (которые затем интерпретируются как кодовые точки Unicode) или None (что означает «неопределённое отображение» и вызывает ошибку).
Отображения для кодирования должны сопоставлять отдельные символы Unicode отдельным символам строки, целым числам (которые затем интерпретируются как кодовые точки Latin-1) или None (что означает «неопределённое отображение» и вызывает ошибку).
Объекты отображения должны поддерживать только интерфейс отображения __getitem__.
Если при поиске символа возникает LookupError, символ копируется как есть; это означает, что его порядковое значение будет интерпретироваться как кодовая точка Unicode или Latin-1 соответственно. Из-за этого отображения должны содержать только те соответствия, которые переводят символы в другие кодовые точки.
Это API кодеков отображения:
-
PyObject*
PyUnicode_DecodeCharmap(const char *s, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode, декодируя size байт закодированной строки s с помощью заданного объекта mapping. Возвращает NULL, если кодек вызвал исключение. Если mapping равен NULL, выполняется декодирование Latin-1. В противном случае это может быть словарь, отображающий байты, или строка Unicode, которая интерпретируется как таблица поиска. Значения байтов, превышающие длину строки, и «символ» U+FFFE считаются «неопределённым отображением».
Изменено в версии 2.4: Разрешена строка Unicode в качестве аргумента отображения.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *mapping, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера size с помощью заданного объекта отображения mapping и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping)¶ - Возвращаемое значение: новая ссылка.
Кодирует объект Unicode с помощью заданного объекта mapping и возвращает результат в виде строкового объекта Python. Обработка ошибок – «strict». Возвращает NULL, если кодек вызвал исключение.
Следующее API кодека особенное тем, что отображает Unicode в Unicode.
-
PyObject*
PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *table, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Преобразует буфер
Py_UNICODEзаданного размера size, применяя к нему отображение символов table, и возвращает результирующий объект Unicode. Возвращает NULL, если кодек возбудил исключение.Таблица отображения mapping должна сопоставлять целочисленные кодовые точки Unicode другим целочисленным кодовым точкам Unicode или
None(что приводит к удалению символа).Таблицы отображения должны лишь предоставлять интерфейс
__getitem__(); словари и последовательности работают хорошо. Неотображённые кодовые позиции символов (те, которые вызываютLookupError) остаются нетронутыми и копируются как есть.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Кодеки MBCS для Windows¶MBCS codecs for Windows
Это API кодеков MBCS. В настоящее время они доступны только в Windows и используют преобразователи Win32 MBCS для выполнения преобразований. Обратите внимание, что MBCS (или DBCS) – это класс кодировок, а не одна конкретная. Целевая кодировка определяется пользовательскими настройками на машине, где выполняется кодек.
-
PyObject*
PyUnicode_DecodeMBCS(const char *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Создаёт объект Unicode, декодируя size байтов строки, закодированной в MBCS, из s. Возвращает NULL, если кодек вызвал исключение.
Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_DecodeMBCSStateful(const char *s, int size, const char *errors, int *consumed)¶ Если consumed равен NULL, действует как
PyUnicode_DecodeMBCS(). Если consumed не равен NULL,PyUnicode_DecodeMBCSStateful()не будет декодировать замыкающий ведущий байт, а количество декодированных байтов будет сохранено в consumed.Новое в версии 2.5.
-
PyObject*
PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Кодирует буфер
Py_UNICODEзаданного размера size с помощью MBCS и возвращает объект строки Python. Возвращает NULL, если кодек возбудил исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
Методы и слоты¶Methods & Slots
Методы и слот-функции¶Methods and Slot Functions
Следующие API могут обрабатывать объекты Unicode и строки на входе (в описаниях мы называем их строками) и возвращают объекты Unicode или целые числа по необходимости.
Все они возвращают NULL или -1 в случае исключения.
-
PyObject*
PyUnicode_Concat(PyObject *left, PyObject *right)¶ - Возвращаемое значение: новая ссылка.
Объединяет две строки, возвращая новую строку Unicode.
-
PyObject*
PyUnicode_Split(PyObject *s, PyObject *sep, Py_ssize_t maxsplit)¶ - Возвращаемое значение: новая ссылка.
Разделяет строку и возвращает список строк Unicode. Если sep равен NULL, разделение происходит по всем подстрокам из пробельных символов. В противном случае разделение выполняется по указанному разделителю. Выполняется не более maxsplit разделений. Если значение отрицательное, ограничение не устанавливается. Разделители не включаются в результирующий список.
Изменено в версии 2.5: Эта функция использовала тип
intдля maxsplit. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_Splitlines(PyObject *s, int keepend)¶ - Возвращаемое значение: новая ссылка.
Разделяет строку Unicode по символам перевода строки и возвращает список строк Unicode. CRLF считается одним переносом строки. Если keepend равно
0, символы перевода строки не включаются в результирующие строки.
-
PyObject*
PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)¶ - Возвращаемое значение: новая ссылка.
Переводит строку, применяя к ней таблицу отображения символов, и возвращает результирующий объект Unicode.
Таблица отображения должна отображать целые числа – кодовые позиции Unicode – в целые числа – кодовые позиции Unicode – или в
None(вызывает удаление символа).Таблицы отображения должны лишь предоставлять интерфейс
__getitem__(); словари и последовательности работают хорошо. Неотображённые кодовые позиции символов (те, которые вызываютLookupError) остаются нетронутыми и копируются как есть.errors имеет обычное для кодеков значение. Может быть NULL, что означает использование обработки ошибок по умолчанию.
-
PyObject*
PyUnicode_Join(PyObject *separator, PyObject *seq)¶ - Возвращаемое значение: новая ссылка.
Объединяет последовательность строк, используя заданный разделитель, и возвращает полученную Unicode-строку.
-
Py_ssize_t
PyUnicode_Tailmatch(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶ Возвращает
1, если substr совпадает сstr[start:end]на заданном хвосте (direction ==-1означает проверку на совпадение с началом, direction ==1– с концом), иначе0. Возвращает-1, если произошла ошибка.Изменено в версии 2.5: Эта функция использовала тип
intдля start и end. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
Py_ssize_t
PyUnicode_Find(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶ Возвращает первую позицию substr в
str[start:end], используя заданное direction (direction ==1означает прямой поиск, direction ==-1– обратный). Возвращаемое значение – индекс первого совпадения; значение-1означает, что совпадений не найдено, а-2– что произошла ошибка и было установлено исключение.Изменено в версии 2.5: Эта функция использовала тип
intдля start и end. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
Py_ssize_t
PyUnicode_Count(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end)¶ Возвращает количество неперекрывающихся вхождений substr в
str[start:end]. Возвращает-1, если произошла ошибка.Изменено в версии 2.5: Эта функция возвращала тип
intи использовала типintдля start и end. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
PyObject*
PyUnicode_Replace(PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)¶ - Возвращаемое значение: новая ссылка.
Заменяет не более maxcount вхождений substr в str на replstr и возвращает результирующий объект Unicode. maxcount ==
-1означает замену всех вхождений.Изменено в версии 2.5: Эта функция использовала тип
intдля maxcount. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
-
int
PyUnicode_Compare(PyObject *left, PyObject *right)¶ Сравнивает две строки и возвращает
-1,0,1для случаев меньше, равно и больше соответственно.
-
int
PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)¶ Выполняет расширенное сравнение двух строк unicode и возвращает одно из следующих значений:
NULLв случае, если возникло исключениеPy_TrueилиPy_Falseдля успешных сравненийPy_NotImplementedв случае, если комбинация типов неизвестна
Обратите внимание, что сравнения
Py_EQиPy_NEмогут вызватьUnicodeWarning, если преобразование аргументов в Unicode завершится неудачей сUnicodeDecodeError.Возможные значения для op:
Py_GT,Py_GE,Py_EQ,Py_NE,Py_LTиPy_LE.