все 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Сообщить о неточности