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

codec.md

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

1> **Источник:** https://python-all.ru/3.3/c-api/codec.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Реестр кодеков и вспомогательные функции89#### `int PyCodec_Register(PyObject *search_function)`1011Регистрирует новую функцию поиска кодека.1213В качестве побочного эффекта эта функция пытается загрузить пакет `encodings`, если он ещё не загружен, чтобы гарантировать, что он всегда будет первым в списке функций поиска.1415#### `int PyCodec_KnownEncoding(const char *encoding)`1617Возвращает `1` или `0` в зависимости от того, зарегистрирован ли кодек для заданной *кодировки*.1819#### `PyObject* PyCodec_Encode(PyObject *object, const char *encoding, const char *errors)`2021Универсальный API кодирования на основе кодеков.2223*object* передаётся через функцию кодировщика, найденную для заданной *encoding*, с использованием метода обработки ошибок, заданного *errors*. *errors* может быть *NULL*, чтобы использовать метод по умолчанию, определённый для кодека. Возбуждает [`LookupError`](https://python-all.ru/3.3/library/exceptions.html#LookupError), если кодировщик не найден.2425#### `PyObject* PyCodec_Decode(PyObject *object, const char *encoding, const char *errors)`2627Универсальный API декодирования на основе кодеков.2829*object* передаётся через функцию декодировщика, найденную для заданной *encoding*, с использованием метода обработки ошибок, заданного *errors*. *errors* может быть *NULL*, чтобы использовать метод по умолчанию, определённый для кодека. Возбуждает [`LookupError`](https://python-all.ru/3.3/library/exceptions.html#LookupError), если кодировщик не найден.3031## API для поиска кодеков3233В следующих функциях строка *encoding* приводится к нижнему регистру перед поиском, что делает поиск кодеков через этот механизм регистронезависимым. Если кодек не найден, устанавливается [`KeyError`](https://python-all.ru/3.3/library/exceptions.html#KeyError) и возвращается *NULL*.3435#### `PyObject* PyCodec_Encoder(const char *encoding)`3637Возвращает функцию кодировщика для заданной *encoding*.3839#### `PyObject* PyCodec_Decoder(const char *encoding)`4041Возвращает функцию декодера для заданной *encoding*.4243#### `PyObject* PyCodec_IncrementalEncoder(const char *encoding, const char *errors)`4445Получить объект [`IncrementalEncoder`](https://python-all.ru/3.3/library/codecs.html#codecs.IncrementalEncoder) для заданного *encoding*.4647#### `PyObject* PyCodec_IncrementalDecoder(const char *encoding, const char *errors)`4849Получить объект [`IncrementalDecoder`](https://python-all.ru/3.3/library/codecs.html#codecs.IncrementalDecoder) для заданного *encoding*.5051#### `PyObject* PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)`5253Получить фабричную функцию [`StreamReader`](https://python-all.ru/3.3/library/codecs.html#codecs.StreamReader) для заданного *encoding*.5455#### `PyObject* PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)`5657Получить фабричную функцию [`StreamWriter`](https://python-all.ru/3.3/library/codecs.html#codecs.StreamWriter) для заданного *encoding*.5859## API реестра обработчиков ошибок кодирования Unicode6061#### `int PyCodec_RegisterError(const char *name, PyObject *error)`6263Зарегистрировать колбэк-функцию обработки ошибок *error* под указанным именем *name*. Эта колбэк-функция будет вызвана кодеком, когда он встретит некодируемые символы/недекодируемые байты, и *name* указан в качестве параметра error в вызове функции encode/decode.6465Колбэк получает один аргумент – экземпляр [`UnicodeEncodeError`](https://python-all.ru/3.3/library/exceptions.html#UnicodeEncodeError), [`UnicodeDecodeError`](https://python-all.ru/3.3/library/exceptions.html#UnicodeDecodeError) или [`UnicodeTranslateError`](https://python-all.ru/3.3/library/exceptions.html#UnicodeTranslateError), который содержит информацию о проблемной последовательности символов или байтов и их смещении в исходной строке (см. [*Unicode Exception Objects*](https://python-all.ru/3.3/c-api/exceptions.html#unicodeexceptions) для функций извлечения этой информации). Колбэк должен либо возбудить переданное исключение, либо вернуть кортеж из двух элементов: замену для проблемной последовательности и целое число, задающее смещение в исходной строке, начиная с которого следует возобновить кодирование/декодирование.6667Возвращает `0` в случае успеха, `-1` при ошибке.6869#### `PyObject* PyCodec_LookupError(const char *name)`7071Ищет зарегистрированную функцию обратного вызова для обработки ошибок под именем *name*. В качестве особого случая можно передать *NULL*, и тогда будет возвращена функция обратного вызова для обработки ошибок со стратегией «strict».7273#### `PyObject* PyCodec_StrictErrors(PyObject *exc)`7475Возбудить *exc* как исключение.7677#### `PyObject* PyCodec_IgnoreErrors(PyObject *exc)`7879Игнорировать ошибку Unicode, пропуская некорректный ввод.8081#### `PyObject* PyCodec_ReplaceErrors(PyObject *exc)`8283Заменяет ошибку кодирования Unicode на `?` или `U+FFFD`.8485#### `PyObject* PyCodec_XMLCharRefReplaceErrors(PyObject *exc)`8687Заменить ошибку кодирования Unicode на символьные ссылки XML.8889#### `PyObject* PyCodec_BackslashReplaceErrors(PyObject *exc)`9091Заменяет ошибку кодирования Unicode на управляющие последовательности с обратной косой чертой (`\x`, `\u` и `\U`).92