все Python 3codecsфункция
codecs.EncodedFile()
потоковые кодеки
Оборачивает двоичный файл в StreamRecoder для перекодирования на лету: снаружи байты в одной кодировке, в файле — в другой.
Синтаксис
codecs.EncodedFile(file, data_encoding, file_encoding=None, errors='strict')
Ловушка в направлении: и запись, и чтение идут байтами, а не строками — write('текст') даёт TypeError, нужен write('текст'.encode('utf-8')). data_encoding — кодировка байтов у вашего кода, file_encoding — в файле. Закрытие обёртки закрывает исходный файл. Обычная задача «прочитать cp1251, сохранить в UTF-8» проще решается двумя open с encoding.
Примеры
import codecs, io
raw = io.BytesIO('ёж'.encode('cp1251'))
f = codecs.EncodedFile(raw, data_encoding='utf-8', file_encoding='cp1251')
print(f.read()) # → b'\xd1\x91\xd0\xb6' — уже UTF-8
try:
f.write('ёж')
except TypeError:
print('нужны bytes') # → нужны bytes
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности