python:codecs --- 编解码器注册和相关基类
python:codecs --- 编解码器注册和相关基类
这个模块定义了标准 Python 编解码器(编码器和解码器)的基类并提供对内部 Python 编解码器注册表的访问,该注册表负责管理编解码器和错误处理的查找过程。 大多数标准编解码器都属于 文本编码格式,它们可将文本编码为字节串(以及将字节串解码为文本),但也提供了一些将文本编码为文本,以及将字节串编码为字节串的编解码器。 自定义编解码器可以在任意类型间进行编码和解码,但某些模块特性被限制为仅适用于 文本编码格式 或将数据编码为 bytes 的编解码器。
该模块定义了以下用于使用任何编解码器进行编码和解码的函数:
codecs.encode(obj, encoding=‘utf-8’, errors=‘strict’)
使用为 encoding 注册的编解码器对 obj 进行编码。
可以给定 Errors 以设置所需要的错误处理方案。 默认的错误处理方案 ‘strict’ 表示编码错误将引发 ValueError (或更特定编解码器相关的子类,例如 UnicodeEncodeError)。 请参阅 编解码器基类 了解有关编解码器错误处理的更多信息。
codecs.decode(obj, encoding=‘utf-8’, errors=‘strict’)
使用为 encoding 注册的编解码器对 obj 进行解码。
可以给定 Errors 以设置所需要的错误处理方案。 默认的错误处理方案 ‘strict’ 表示编码错误将引发 ValueError (或更特定编解码器相关的子类,例如 UnicodeDecodeError)。 请参阅 编解码器基类 了解有关编解码器错误处理的更多信息。
每种编解码器的完整细节也可以直接查找获取:
codecs.lookup(encoding)
在 Python 编解码器注册表中查找编解码器信息,并返回一个 CodecInfo 对象,其定义见下文。
首先将会在注册表缓存中查找编码,如果未找到,则会扫描注册的搜索函数列表。 如果没有找到 CodecInfo 对象,则将引发 LookupError。 否则,CodecInfo 对象将被存入缓存并返回给调用者。
class codecs.CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None)
查找编解码器注册表所得到的编解码器细节信息。 构造器参数将保存为同名的属性:
name
编码名称
encode
decode
无状态的编码和解码函数。 它们必须是具有与 Codec 的 encode() 和 decode() 方法相同接口的函数或方法 (参见 Codec 接口)。 这些函数或方法应当工作于无状态的模式。
incrementalencoder
incrementaldecoder
增量式的编码器和解码器类或工厂函数。 这些函数必须分别提供由基类 IncrementalEncoder 和 IncrementalDecoder 所定义的接口。 增量式编解码器可以保持状态。
streamwriter
streamreader
流式写入器和读取器类或工厂函数。 这些函数必须分别提供由基类 StreamWriter 和 StreamReader 所定义的接口。 流式编解码器可以保持状态。
为了简化对各种编解码器组件的访问,本模块提供了以下附加函数,它们使用 lookup() 来执行编解码器查找:
codecs.getencoder(encoding)
查找给定编码的编解码器并返回其编码器函数。
在编码无法找到时将引发 LookupError。
codecs.getdecoder(encoding)
查找给定编码的编解码器并返回其解码器函数。
在编码无法找到时将引发 LookupError。
codecs.getincrementalencoder(encoding)
查找给定编码的编解码器并返回其增量式编码器类或工厂函数。
在编码无法找到或编解码器不支持增量式编码器时将引发 LookupError。
codecs.getincrementaldecoder(encoding)
查找给定编码的编解码器并返回其增量式解码器类或工厂函数。
在编码无法找到或编解码器不支持增量式解码器时将引发 LookupError。
codecs.getreader(encoding)
查找给定编码的编解码器并返回其 StreamReader 类或工厂函数。
在编码无法找到时将引发 LookupError。
codecs.getwriter(encoding)
查找给定编码的编解码器并返回其 StreamWriter 类或工厂函数。
在编码无法找到时将引发 LookupError。
自定义编解码器的启用是通过注册适当的编解码器搜索函数:
codecs.register(search_function)
注册一个编解码器搜索函数。 搜索函数预期接收一个参数,即全部以小写字母表示的编码格式名称,其中中连字符和空格会被转换为下划线,并返回一个 CodecInfo 对象。 在搜索函数无法找到给定编码格式的情况下,它应当返回 None。
在 3.9 版更改: 连字符和空格会被转换为下划线。
codecs.unregister(search_function)
注销一个编解码器搜索函数并清空注册表缓存。 如果指定搜索函数未被注册,则不做任何操作。
3.10 新版功能.
虽然内置的 open() 和相关联的 io 模块是操作已编码文本文件的推荐方式,但本模块也提供了额外的工具函数和类,允许在操作二进制文件时使用更多各类的编解码器:
codecs.open(filename, mode=‘r’, encoding=None, errors=‘strict’, buffering=- 1)
使用给定的 mode 打开已编码的文件并返回一个 StreamReaderWriter 的实例,提供透明的编码/解码。 默认的文件模式为 ‘r’,表示以读取模式打开文件。
encoding 指定文件所要使用的编码格式。 允许任何编码为字节串或从字节串解码的编码格式,而文件方法所支持的数据类型则取决于所使用的编解码器。
可以指定 errors 来定义错误处理方案。 默认值 ‘strict’ 表示在出现编码错误时引发 ValueError。
buffering 的含义与内置 open() 函数中的相同。 默认值 -1 表示将使用默认的缓冲区大小。
在 3.11 版更改: The ‘U’ mode has been removed.
codecs.EncodedFile(file, data_encoding, file_encoding=None, errors=‘strict’)
返回一个 StreamRecoder 实例,它提供了 file 的透明转码包装版本。 当包装版本被关闭时原始文件也会被关闭。
写入已包装文件的数据会根据给定的 data_encoding 解码,然后以使用 file_encoding 的字节形式写入原始文件。 从原始文件读取的字节串将根据 file_encoding 解码,其结果将使用 data_encoding 进行编码。
如果 file_encoding 未给定,则默认为 data_encoding。
可以指定 errors 来定义错误处理方案。 默认值 ‘strict’ 表示在出现编码错误时引发 ValueError。
codecs.iterencode(iterator, encoding, errors=‘strict’, **kwargs)
使用增量式编码器通过迭代来编码由 iterator 所提供的输入。 此函数属于 generator。 errors 参数(以及任何其他关键字参数)会被传递给增量式编码器。
此函数要求编解码器接受 str 对象形式的文本进行编码。 因此它不支持字节到字节的编码器,例如 base64_codec。
codecs.iterdecode(iterator, encoding, errors=‘strict’, **kwargs)
使用增量式解码器通过迭代来解码由 iterator 所提供的输入。 此函数属于 generator。 errors 参数(以及任何其他关键字参数)会被传递给增量式解码器。
此函数要求编解码器接受 bytes 对象进行解码。 因此它不支持文本到文本的编码器,例如 rot_13,但是 rot_13 可以通过同样效果的 iterencode() 来使用。
本模块还提供了以下常量,适用于读取和写入依赖于平台的文件:
codecs.BOM
codecs.BOM_BE
codecs.BOM_LE
codecs.BOM_UTF8
codecs.BOM_UTF16
codecs.BOM_UTF16_BE
codecs.BOM_UTF16_LE
codecs.BOM_UTF32
codecs.BOM_UTF32_BE
codecs.BOM_UTF32_LE
这些常量定义了多种字节序列,即一些编码格式的 Unicode 字节顺序标记(BOM)。 它们在 UTF-16 和 UTF-32 数据流中被用以指明所使用的字节顺序,并在 UTF-8 中被用作 Unicode 签名。 BOM_UTF16 是 BOM_UTF16_BE 或 BOM_UTF16_LE,具体取决于平台的本机字节顺序,BOM 是 BOM_UTF16 的别名, BOM_LE 是 BOM_UTF16_LE 的别名,BOM_BE 是 BOM_UTF16_BE 的别名。 其他序列则表示 UTF-8 和 UTF-32 编码格式中的 BOM。
该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/127998254
python:codecs --- 编解码器注册和相关基类相关推荐
- python类方法和实例方法syntax errors_《Fluent Python》CH.11_面向对象_接口:从协议到抽象基类...
主要内容 首先,本章说明抽象基类的常见用途:实现接口时作为超类使用 说明抽象基类如何检查具体子类是否符合接口定义,以及如何使 用注册机制声明一个类实现了某个接口,而不进行子类化操作 最后, 说明如何让 ...
- Python学习笔记28:从协议到抽象基类
Python学习笔记28:从协议到抽象基类 今后本系列笔记的示例代码都将存放在Github项目:https://github.com/icexmoon/python-learning-notes 在P ...
- Python高级:了解Python ABC(抽象基类)及 应用场景
ABC,Abstract Base Class(抽象基类),主要定义了基本类和最基本的抽象方法,可以为子类定义共有的API,不需要具体实现.相当于是Java中的接口或者是抽象类. 抽象基类可以不实现具 ...
- Python:抽象基类(abc模块)
抽象基类(abc模块) 介绍 白话理解 实用场景 介绍 该模块提供了一个元类 ABCMeta,可以用来定义抽象类,另外还提供一个工具类 ABC,可以用它以继承的方式定义抽象基类. 装饰器以" ...
- 第7.21节 Python抽象类—register注册虚拟子类
上两节介绍了Python抽象类的真实子类的定义和使用,本节介绍另一种抽象类的实现方法:虚拟子类方法. 一. 相关概念 虚拟子类是将其他的不是从抽象基类派生的类"注册"到抽象基 ...
- python:编解码器基类之增量式的编码和解码
python:编解码器基类之增量式的编码和解码 IncrementalEncoder 对象 IncrementalDecoder 对象 IncrementalEncoder 和 Incremental ...
- python:编解码器基类之无状态的编码和解码
python:编解码器基类之无状态的编码和解码 基本 Codec 类定义了这些方法,同时还定义了无状态编码器和解码器的函数接口: Codec.encode(input, errors='strict' ...
- python异常类型(Exception只是常规错误的基类)
在用try-except-finally-机制处理异常的时候,一定要注意异常的继承关系. 例如在except中如果有StandardError,那么永远也捕获不到ValueError,因为ValueE ...
- python中的序列类型数据结构元素的切片操作_PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)...
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...
最新文章
- 什么是Java多态?如何实现Java多态?
- Bumblebee微服务网关之请求统一验证
- 【树链剖分】【倍增】宝石(2021GDOI Day2 T1)
- windows下的gvim配置
- BFC的布局规则以及触发条件
- TensorFlow的一些基本概念
- spring mvc 伪静态处理
- java-mail.jar_mail.jar-Mail.jar下载 --pc6下载站
- 第26次ccf认证第二题:寻宝!大冒险!
- mri计算机系统,MRI的一些基本介绍
- 卡塔尔世界杯进入倒计时,万人观赛的直播体验如何保障?
- 乐吾乐2D可视化为智慧水务可视化赋能(二)
- Spyder 中 Reloaded modules 错误的解决方法
- linux卸载teamviewer,ubuntu 16.04 desktop + server LTS - TeamViewer 软件彻底卸载
- 企业微信和个人微信区别到底有哪些
- inductive bias:归纳偏置
- JWT--使用/教程/实例
- 【Open Judge】7624 山区建小学
- 这是我见过最完美的“docker学习宝典”,阿里云高工熬夜手写,服!
- 武汉交通规划9号线九号线