все Python 3codecsфункция
codecs.getdecoder()
реестр кодеков
Возвращает функцию-декодировщик кодека без состояния: она принимает байты и отдаёт пару (строка, сколько байтов обработано). То же, что lookup(name).decode.
Синтаксис
decode = codecs.getdecoder(encoding)
Результат — кортеж, а не str, и это частая ошибка при замене bytes.decode. Декодировщик без состояния не умеет ждать продолжения: многобайтовый символ, разрезанный границей куска из сети или файла, даёт UnicodeDecodeError. Для данных по кускам берут getincrementaldecoder или iterdecode, для целых байтов хватает bytes.decode.
Примеры
import codecs
dec = codecs.getdecoder('utf-8')
print(dec(b'abc')) # → ('abc', 3)
chunk = 'я'.encode('utf-8')[:1]
try:
dec(chunk)
except UnicodeDecodeError as e:
print(e.reason) # → unexpected end of data
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности