все Python 3codecsфункция
codecs.register()
реестр кодеков
Регистрирует функцию поиска кодеков: по нормализованному имени она возвращает CodecInfo или None. Так в Python добавляют собственную кодировку.
Синтаксис
codecs.register(search_function)
Регистрируют не кодек, а функцию поиска, и она обязана вернуть None для чужих имён — иначе перехватит все кодировки. Имя приходит уже в нижнем регистре, поэтому сравнивать надо с 'shout', а не 'Shout'. Результат кешируется: после первого успешного lookup изменение функции поиска на это имя не повлияет, а снять регистрацию можно codecs.unregister (3.10+). Для учебной задачи свой кодек почти никогда не нужен — хватает str.translate или функции.
Примеры
import codecs
def search(name):
if name == 'shout':
enc = lambda s, errors='strict': (s.upper().encode(), len(s))
dec = lambda b, errors='strict': (bytes(b).decode().lower(), len(b))
return codecs.CodecInfo(enc, dec, name='shout')
return None
codecs.register(search)
print('hi'.encode('Shout')) # → b'HI'
print(b'HI'.decode('shout')) # → hi
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности