Модуль codecs
определяет набор базовых классов, которые определяют интерфейсы для работы с объектами Codec
, а также могут быть использованы в качестве основы для пользовательских реализаций кодеков.
Каждый кодек должен определить четыре интерфейса, чтобы сделать его пригодным для использования в качестве кодека в Python:
Устройства чтения и записи потока обычно повторно используют кодер/декодер без состояния для реализации файловых протоколов. Авторы кодека также должны определить, как кодек будет обрабатывать ошибки кодирования и декодирования.
Базовый класс codecs.Codec()
определяет эти методы (но не реализует!), которые также определяют функциональные интерфейсы кодера и декодера без состояния:
class Codec: def encode(self, input, errors='strict'): raise NotImplementedError def decode(self, input, errors='strict'): raise NotImplementedError
Codec.encode(input[, errors])
:Метод Codec.encode()
кодирует входные данные объекта и возвращает кортеж типа (output object, length consumed)
. Например текстовое кодирование преобразует строковый объект в байтовый объект с использованием определенной кодировки набора символов (например cp1252 или iso-8859-1).
Аргумент errors
определяет применяемую обработку ошибок. По умолчанию используется 'strict'
обработка.
Метод не может хранить состояние в экземпляре Codec
. Используйте StreamWriter
для кодеков, которые должны сохранять состояние, чтобы сделать кодирование эффективным.
Кодировщик должен быть способен обрабатывать вход нулевой длины и возвращать пустой объект типа объекта вывода в этой ситуации.
Codec.decode(input[, errors])
:Метод Codec.decode()
декодирует входные данные объекта и возвращает кортеж типа (output object, length consumed)
. Например для кодирования текста декодирование преобразует объект байтов, закодированный с использованием конкретной кодировки набора символов, в строковый объект.
Для кодировок текста и байтовых кодеков входные данные должны быть байтовыми объектами или объектами, которые предоставляют буферный интерфейс только для чтения. Например объекты буфера и файлы отображения памяти.
Аргумент errors
определяет применяемую обработку ошибок. По умолчанию используется 'strict'
обработка.
Метод не может хранить состояние в экземпляре Codec
. Используйте StreamReader
для кодеков, которые должны сохранять состояние, чтобы сделать кодирование эффективным.
Кодировщик должен быть способен обрабатывать вход нулевой длины и возвращать пустой объект типа объекта вывода в этой ситуации.