Python Glossary English

все Python 3codecsфункция

codecs.getincrementaldecoder()

инкрементальные кодеки

Возвращает класс инкрементального декодировщика: он принимает байты кусками и сам держит недокодированный хвост. Главный инструмент для текста из сокета или по блокам.

Синтаксис

dec = codecs.getincrementaldecoder(encoding)(errors='strict')

Вот где codecs действительно нужен: bytes.decode на куске, разрезавшем букву пополам, падает или с errors='replace' молча портит текст. Инкрементальный декодировщик откладывает неполный символ до следующего куска. Возвращается класс — его надо вызвать: getincrementaldecoder('utf-8')(). Последний кусок передают с final=True, иначе оборванный хвост в конце потока просто пропадёт без ошибки.

Примеры

import codecs
data = 'Привет'.encode('utf-8')
print(data[:3].decode('utf-8', 'replace'))  # → П�
dec = codecs.getincrementaldecoder('utf-8')()
print(dec.decode(data[:3]), dec.decode(data[3:], final=True))  # → П ривет
import codecs
dec = codecs.getincrementaldecoder('utf-8')()
dec.decode(b'ok\xd0')
try:
    dec.decode(b'', final=True)
except UnicodeDecodeError as e:
    print(e.reason)  # → unexpected end of data

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности