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 --- 编解码器注册和相关基类相关推荐

  1. python类方法和实例方法syntax errors_《Fluent Python》CH.11_面向对象_接口:从协议到抽象基类...

    主要内容 首先,本章说明抽象基类的常见用途:实现接口时作为超类使用 说明抽象基类如何检查具体子类是否符合接口定义,以及如何使 用注册机制声明一个类实现了某个接口,而不进行子类化操作 最后, 说明如何让 ...

  2. Python学习笔记28:从协议到抽象基类

    Python学习笔记28:从协议到抽象基类 今后本系列笔记的示例代码都将存放在Github项目:https://github.com/icexmoon/python-learning-notes 在P ...

  3. Python高级:了解Python ABC(抽象基类)及 应用场景

    ABC,Abstract Base Class(抽象基类),主要定义了基本类和最基本的抽象方法,可以为子类定义共有的API,不需要具体实现.相当于是Java中的接口或者是抽象类. 抽象基类可以不实现具 ...

  4. Python:抽象基类(abc模块)

    抽象基类(abc模块) 介绍 白话理解 实用场景 介绍 该模块提供了一个元类 ABCMeta,可以用来定义抽象类,另外还提供一个工具类 ABC,可以用它以继承的方式定义抽象基类. 装饰器以" ...

  5. 第7.21节 Python抽象类—register注册虚拟子类

    上两节介绍了Python抽象类的真实子类的定义和使用,本节介绍另一种抽象类的实现方法:虚拟子类方法. 一.    相关概念 虚拟子类是将其他的不是从抽象基类派生的类"注册"到抽象基 ...

  6. python:编解码器基类之增量式的编码和解码

    python:编解码器基类之增量式的编码和解码 IncrementalEncoder 对象 IncrementalDecoder 对象 IncrementalEncoder 和 Incremental ...

  7. python:编解码器基类之无状态的编码和解码

    python:编解码器基类之无状态的编码和解码 基本 Codec 类定义了这些方法,同时还定义了无状态编码器和解码器的函数接口: Codec.encode(input, errors='strict' ...

  8. python异常类型(Exception只是常规错误的基类)

    在用try-except-finally-机制处理异常的时候,一定要注意异常的继承关系. 例如在except中如果有StandardError,那么永远也捕获不到ValueError,因为ValueE ...

  9. python中的序列类型数据结构元素的切片操作_PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)...

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

最新文章

  1. 什么是Java多态?如何实现Java多态?
  2. Bumblebee微服务网关之请求统一验证
  3. 【树链剖分】【倍增】宝石(2021GDOI Day2 T1)
  4. windows下的gvim配置
  5. BFC的布局规则以及触发条件
  6. TensorFlow的一些基本概念
  7. spring mvc 伪静态处理
  8. java-mail.jar_mail.jar-Mail.jar下载 --pc6下载站
  9. 第26次ccf认证第二题:寻宝!大冒险!
  10. mri计算机系统,MRI的一些基本介绍
  11. 卡塔尔世界杯进入倒计时,万人观赛的直播体验如何保障?
  12. 乐吾乐2D可视化为智慧水务可视化赋能(二)
  13. Spyder 中 Reloaded modules 错误的解决方法
  14. linux卸载teamviewer,ubuntu 16.04 desktop + server LTS - TeamViewer 软件彻底卸载
  15. 企业微信和个人微信区别到底有哪些
  16. inductive bias:归纳偏置
  17. JWT--使用/教程/实例
  18. 【Open Judge】7624 山区建小学
  19. 这是我见过最完美的“docker学习宝典”,阿里云高工熬夜手写,服!
  20. 武汉交通规划9号线九号线

热门文章

  1. 我的书架——一些关于书的拉杂胡说(转贴)
  2. 前端post请求报400错误
  3. 【泛微OA】JS限制明细行重复
  4. 重庆地区移动宽带更换光猫
  5. jmeter接口测试流程
  6. 程序猿开发软件插件推荐
  7. A glimpse of Support Vector Machine
  8. 别小看tail 命令,它难倒了技术总监
  9. 软件测试方法名称大全
  10. 李昂 软件工程第一次作业