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

codec.md

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

1> **Источник:** https://python-all.ru/3.1/c-api/codec.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Реестр кодеков и вспомогательные функции89**int `PyCodec_Register`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*search\_function*)**1011Регистрирует новую функцию поиска кодека.1213В качестве побочного эффекта эта функция пытается загрузить пакет `encodings`, если он ещё не загружен, чтобы гарантировать, что он всегда будет первым в списке функций поиска.1415**int `PyCodec_KnownEncoding`(const char *\*encoding*)**1617Возвращает1819`1`2021или2223`0`2425в зависимости от того, зарегистрирован ли кодек для заданной2627*кодировки*2829.3031**[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*)**3233Универсальный API кодирования на основе кодеков.3435*object* передаётся через функцию кодировщика, найденную для заданной *encoding*, с использованием метода обработки ошибок, заданного *errors*. *errors* может быть *NULL*, чтобы использовать метод по умолчанию, определённый для кодека. Возбуждает [`LookupError`](https://python-all.ru/3.1/library/exceptions.html#LookupError), если кодировщик не найден.3637**[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*)**3839Универсальный API декодирования на основе кодеков.4041*object* передаётся через функцию декодировщика, найденную для заданной *encoding*, с использованием метода обработки ошибок, заданного *errors*. *errors* может быть *NULL*, чтобы использовать метод по умолчанию, определённый для кодека. Возбуждает [`LookupError`](https://python-all.ru/3.1/library/exceptions.html#LookupError), если кодировщик не найден.4243## API для поиска кодеков4445В следующих функциях строка *encoding* приводится к нижнему регистру перед поиском, что делает поиск кодеков через этот механизм регистронезависимым. Если кодек не найден, устанавливается [`KeyError`](https://python-all.ru/3.1/library/exceptions.html#KeyError) и возвращается *NULL*.4647**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_Encoder`(const char *\*encoding*)**4849Возвращает функцию кодировщика для заданной5051*encoding*5253.5455**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_Decoder`(const char *\*encoding*)**5657Возвращает функцию декодера для заданной5859*encoding*6061.6263**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_IncrementalEncoder`(const char *\*encoding*, const char *\*errors*)**6465Возвращает объект6667`IncrementalEncoder`6869для заданной7071*encoding*7273.7475**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_IncrementalDecoder`(const char *\*encoding*, const char *\*errors*)**7677Возвращает объект7879`IncrementalDecoder`8081для заданной8283*encoding*8485.8687**[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*)**8889Возвращает фабричную функцию9091`StreamReader`9293для заданной9495*encoding*9697.9899**[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*)**100101Возвращает фабричную функцию102103`StreamWriter`104105для заданной106107*encoding*108109.110111## API реестра обработчиков ошибок кодирования Unicode112113**int `PyCodec_RegisterError`(const char *\*name*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*error*)**114115Зарегистрировать колбэк-функцию обработки ошибок *error* под указанным именем *name*. Эта колбэк-функция будет вызвана кодеком, когда он встретит некодируемые символы/недекодируемые байты, и *name* указан в качестве параметра error в вызове функции encode/decode.116117Колбэк получает один аргумент – экземпляр [`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) для функций извлечения этой информации). Колбэк должен либо возбудить переданное исключение, либо вернуть кортеж из двух элементов: замену для проблемной последовательности и целое число, задающее смещение в исходной строке, начиная с которого следует возобновить кодирование/декодирование.118119Возвращает `0` в случае успеха, `-1` при ошибке.120121**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyCodec_LookupError`(const char *\*name*)**122123Ищет зарегистрированную функцию обратного вызова для обработки ошибок под именем124125*name*126127. В качестве особого случая можно передать128129*NULL*130131, и тогда будет возвращена функция обратного вызова для обработки ошибок со стратегией «strict».132133**[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*)**134135Возбудить136137*exc*138139как исключение.140141**[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*)**142143Игнорировать ошибку Unicode, пропуская некорректный ввод.144145**[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*)**146147Заменяет ошибку кодирования Unicode на148149`?`150151или152153`U+FFFD`154155.156157**[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*)**158159Заменить ошибку кодирования Unicode на символьные ссылки XML.160161**[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*)**162163Заменяет ошибку кодирования Unicode на управляющие последовательности с обратной косой чертой (164165`\x`166167,168169`\u`170171и172173`\U`174175).176