все Python 3codecsпонятие
codecs.IncrementalDecoder
инкрементальные кодеки
Базовый класс инкрементальных декодировщиков: decode(data, final=False) копит неполный хвост между вызовами, reset() и getstate() управляют состоянием.
Синтаксис
class MyDecoder(codecs.IncrementalDecoder):
def decode(self, input, final=False): ...
Сам по себе он ничего не декодирует: decode у базового класса бросает NotImplementedError. Готовый декодировщик берут через getincrementaldecoder, а наследуются, только когда пишут свой кодек. Такой же механизм внутри io.TextIOWrapper — поэтому open(..., encoding=...) корректно читает UTF-8 блоками. getstate() показывает, сколько байтов ждёт продолжения: (b'\xd0', 0) — половина буквы.
Примеры
import codecs
dec = codecs.getincrementaldecoder('utf-8')()
print(repr(dec.decode(b'\xd0')), dec.getstate()) # → '' (b'\xd0', 0)
print(dec.decode(b'\xb6')) # → ж
print(isinstance(dec, codecs.IncrementalDecoder)) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности