> **Источник:** https://python-all.ru/3.1/c-api/codec.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Реестр кодеков и вспомогательные функции

**int `PyCodec_Register`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*search\_function*)**

Регистрирует новую функцию поиска кодека.

В качестве побочного эффекта эта функция пытается загрузить пакет `encodings`, если он ещё не загружен, чтобы гарантировать, что он всегда будет первым в списке функций поиска.

**int `PyCodec_KnownEncoding`(const char *\*encoding*)**

Возвращает

`1`

или

`0`

в зависимости от того, зарегистрирован ли кодек для заданной

*кодировки*

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_Encode`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*object*, const char *\*encoding*, const char *\*errors*)**

Универсальный API кодирования на основе кодеков.

*object* передаётся через функцию кодировщика, найденную для заданной *encoding*, с использованием метода обработки ошибок, заданного *errors*. *errors* может быть *NULL*, чтобы использовать метод по умолчанию, определённый для кодека. Возбуждает [`LookupError`](https://python-all.ru/3.1/library/exceptions.html#LookupError), если кодировщик не найден.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_Decode`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*object*, const char *\*encoding*, const char *\*errors*)**

Универсальный API декодирования на основе кодеков.

*object* передаётся через функцию декодировщика, найденную для заданной *encoding*, с использованием метода обработки ошибок, заданного *errors*. *errors* может быть *NULL*, чтобы использовать метод по умолчанию, определённый для кодека. Возбуждает [`LookupError`](https://python-all.ru/3.1/library/exceptions.html#LookupError), если кодировщик не найден.

## API для поиска кодеков

В следующих функциях строка *encoding* приводится к нижнему регистру перед поиском, что делает поиск кодеков через этот механизм регистронезависимым. Если кодек не найден, устанавливается [`KeyError`](https://python-all.ru/3.1/library/exceptions.html#KeyError) и возвращается *NULL*.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_Encoder`(const char *\*encoding*)**

Возвращает функцию кодировщика для заданной

*encoding*

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_Decoder`(const char *\*encoding*)**

Возвращает функцию декодера для заданной

*encoding*

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_IncrementalEncoder`(const char *\*encoding*, const char *\*errors*)**

Возвращает объект

`IncrementalEncoder`

для заданной

*encoding*

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_IncrementalDecoder`(const char *\*encoding*, const char *\*errors*)**

Возвращает объект

`IncrementalDecoder`

для заданной

*encoding*

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_StreamReader`(const char *\*encoding*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*stream*, const char *\*errors*)**

Возвращает фабричную функцию

`StreamReader`

для заданной

*encoding*

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_StreamWriter`(const char *\*encoding*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*stream*, const char *\*errors*)**

Возвращает фабричную функцию

`StreamWriter`

для заданной

*encoding*

.

## API реестра обработчиков ошибок кодирования Unicode

**int `PyCodec_RegisterError`(const char *\*name*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*error*)**

Зарегистрировать колбэк-функцию обработки ошибок *error* под указанным именем *name*. Эта колбэк-функция будет вызвана кодеком, когда он встретит некодируемые символы/недекодируемые байты, и *name* указан в качестве параметра error в вызове функции encode/decode.

Колбэк получает один аргумент – экземпляр [`UnicodeEncodeError`](https://python-all.ru/3.1/library/exceptions.html#UnicodeEncodeError), [`UnicodeDecodeError`](https://python-all.ru/3.1/library/exceptions.html#UnicodeDecodeError) или [`UnicodeTranslateError`](https://python-all.ru/3.1/library/exceptions.html#UnicodeTranslateError), который содержит информацию о проблемной последовательности символов или байтов и их смещении в исходной строке (см. [*Unicode Exception Objects*](https://python-all.ru/3.1/c-api/exceptions.html#unicodeexceptions) для функций извлечения этой информации). Колбэк должен либо возбудить переданное исключение, либо вернуть кортеж из двух элементов: замену для проблемной последовательности и целое число, задающее смещение в исходной строке, начиная с которого следует возобновить кодирование/декодирование.

Возвращает `0` в случае успеха, `-1` при ошибке.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_LookupError`(const char *\*name*)**

Ищет зарегистрированную функцию обратного вызова для обработки ошибок под именем

*name*

. В качестве особого случая можно передать

*NULL*

, и тогда будет возвращена функция обратного вызова для обработки ошибок со стратегией «strict».

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_StrictErrors`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*exc*)**

Возбудить

*exc*

как исключение.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_IgnoreErrors`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*exc*)**

Игнорировать ошибку Unicode, пропуская некорректный ввод.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_ReplaceErrors`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*exc*)**

Заменяет ошибку кодирования Unicode на

`?`

или

`U+FFFD`

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_XMLCharRefReplaceErrors`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*exc*)**

Заменить ошибку кодирования Unicode на символьные ссылки XML.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_BackslashReplaceErrors`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*exc*)**

Заменяет ошибку кодирования Unicode на управляющие последовательности с обратной косой чертой (

`\x`

,

`\u`

и

`\U`

).
