все Python 3codecsпонятие
codecs.StreamRecoder
потоковые кодеки
Перекодирующая обёртка над двоичным потоком: снаружи байты в одной кодировке, внутри — в другой. Обычно создаётся через codecs.EncodedFile.
Синтаксис
codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors='strict')
Конструктор принимает шесть параметров, и порядок легко перепутать: encode и decode — функции для ВНЕШНЕЙ стороны, Reader и Writer — классы для кодировки файла. Поэтому его почти всегда получают через EncodedFile. И чтение, и запись идут bytes, а не str: текст наружу он не отдаёт никогда.
Примеры
import codecs, io
raw = io.BytesIO('ёж'.encode('cp1251'))
rec = codecs.StreamRecoder(raw, codecs.getencoder('utf-8'), codecs.getdecoder('utf-8'),
codecs.getreader('cp1251'), codecs.getwriter('cp1251'))
print(rec.read()) # → b'\xd1\x91\xd0\xb6'
print(type(codecs.EncodedFile(io.BytesIO(), 'utf-8')).__name__) # → StreamRecoder
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности