您要求的最低!
- 编写编码功能和解码功能。
- 编写一个“搜索函数”,该函数返回
CodecInfo
由上述编码器和解码器构造的对象。 - 使用prec.register注册返回上述
CodecInfo
对象的函数。
这是将小写字母az顺序转换为0-25的示例。
import precsimport stringfrom typing import Tuple# prepare map from numbers to letters_enpre_table = {str(number): bytes(letter, 'ascii') for number, letter in enumerate(string.ascii_lowercase)}# prepare inverse map_depre_table = {ord(v): k for k, v in _enpre_table.items()}def custom_enpre(text: str) -> Tuple[bytes, int]: # example enprer that converts ints to letters # see https://docs.python.org/3/library/precs.html#precs.Codec.enpre return b''.join(_enpre_table[x] for x in text), len(text)def custom_depre(binary: bytes) -> Tuple[str, int]: # example deprer that converts letters to ints # see https://docs.python.org/3/library/precs.html#precs.Codec.depre return ''.join(_depre_table[x] for x in binary), len(binary)def custom_search_function(encoding_name): return precs.CodecInfo(custom_enpre, custom_depre, name='Reasons')def main(): # register your custom prec # note that CodecInfo.name is used later precs.register(custom_search_function) binary = b'abcdefg' # depre letters to numbers text = precs.depre(binary, encoding='Reasons') print(text) # enpre numbers to letters binary2 = precs.enpre(text, encoding='Reasons') print(binary2) # enpre(depre(...)) should be an identity function assert binary == binary2if __name__ == '__main__': main()运行此打印
$ python prec_example.py0123456b'abcdefg'
有关界面的详细信息,请参见https://docs.python.org/3/library/precs.html#prec-
objects
Codec。特别是解码功能
…解码对象 输入 并返回一个元组(输出对象,消耗的长度)。
而编码功能
…编码对象 输入 并返回一个元组(输出对象,消耗的长度)。
注意,您还应该担心处理流,增量编码/解码以及错误处理。有关更完整的示例,请参考@
krs013提到的十六进制编解码器。
PS代替
prec.depre,也可以使用
prec.open(..., encoding='Reasons')。



