Python Glossary English

все Python 3codecsфункция

codecs.getencoder()

реестр кодеков

Возвращает функцию-кодировщик кодека без состояния: она принимает строку и отдаёт пару (байты, сколько символов обработано). То же, что lookup(name).encode.

Синтаксис

encode = codecs.getencoder(encoding)

Главная ловушка — результат кортеж, а не bytes: f('я') вернёт (b'\xd1\x8f', 1), и запись его в файл как есть даст TypeError. Кодировщик не помнит состояния, поэтому для UTF-16 каждый вызов заново пишет BOM — для кусков нужен getincrementalencoder. Если просто нужны байты, str.encode короче и понятнее.

Примеры

import codecs
enc = codecs.getencoder('utf-8')
data, used = enc('яблоко')
print(data[:2], used)  # → b'\xd1\x8f' 6
enc16 = codecs.getencoder('utf-16')
print(enc16('a')[0], enc16('b')[0])  # → ? b'\xff\xfea\x00' b'\xff\xfeb\x00' — BOM в каждом вызове, порядок байтов зависит от машины

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности