Python Glossary English

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