Python Glossary English

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