编解码器注册表和支持函数

int PyCodec_Register(PyObject *search_function)
属于 稳定 ABI 的一部分。

注册一个新的编解码器搜索函数。

作为副作用,如果尚未完成,这将尝试加载 encodings 包,以确保它始终位于搜索函数列表的第一个。

int PyCodec_Unregister(PyObject *search_function)
自 3.10 版本起属于 稳定 ABI 的一部分。

注销编解码器搜索函数并清除注册表的缓存。如果搜索函数未注册,则不执行任何操作。成功返回 0。引发异常并返回 -1 表示错误。

在 3.10 版本中添加。

int PyCodec_KnownEncoding(const char *encoding)
属于 稳定 ABI 的一部分。

根据给定 encoding 是否有已注册的编解码器,返回 10。此函数始终成功。

PyObject *PyCodec_Encode(PyObject *object, const char *encoding, const char *errors)
返回值:新引用。属于 稳定 ABI 的一部分。

通用的基于编解码器的编码 API。

object 通过为给定的 encoding 找到的编码器函数传递,并使用 errors 定义的错误处理方法。errors 可以为 NULL,以使用为编解码器定义的默认方法。如果找不到编码器,则引发 LookupError

PyObject *PyCodec_Decode(PyObject *object, const char *encoding, const char *errors)
返回值:新引用。属于 稳定 ABI 的一部分。

通用的基于编解码器的解码 API。

object 通过为给定的 encoding 找到的解码器函数传递,并使用 errors 定义的错误处理方法。errors 可以为 NULL,以使用为编解码器定义的默认方法。如果找不到编码器,则引发 LookupError

编解码器查找 API

在以下函数中,encoding 字符串在查找时会转换为全部小写字符,这使得通过此机制查找的编码在效果上不区分大小写。如果找不到编解码器,则会设置 KeyError 并返回 NULL

PyObject *PyCodec_Encoder(const char *encoding)
返回值:新引用。属于 稳定 ABI 的一部分。

获取给定 encoding 的编码器函数。

PyObject *PyCodec_Decoder(const char *encoding)
返回值:新引用。属于 稳定 ABI 的一部分。

获取给定 encoding 的解码器函数。

PyObject *PyCodec_IncrementalEncoder(const char *encoding, const char *errors)
返回值:新引用。属于 稳定 ABI 的一部分。

获取给定 encodingIncrementalEncoder 对象。

PyObject *PyCodec_IncrementalDecoder(const char *encoding, const char *errors)
返回值:新引用。属于 稳定 ABI 的一部分。

获取给定 encodingIncrementalDecoder 对象。

PyObject *PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)
返回值:新引用。属于 稳定 ABI 的一部分。

获取给定 encodingStreamReader 工厂函数。

PyObject *PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)
返回值:新引用。属于 稳定 ABI 的一部分。

获取给定 encodingStreamWriter 工厂函数。

Unicode 编码错误处理程序的注册表 API

int PyCodec_RegisterError(const char *name, PyObject *error)
属于 稳定 ABI 的一部分。

使用给定的name注册错误处理回调函数error。当编解码器遇到不可编码的字符/不可解码的字节,并且在调用编码/解码函数时,name被指定为错误参数时,将调用此回调函数。

回调函数会收到一个参数,即 UnicodeEncodeError, UnicodeDecodeErrorUnicodeTranslateError 的实例。该实例包含关于有问题的字符或字节序列的信息以及它们在原始字符串中的偏移量(请参阅 Unicode 异常对象 获取用于提取此信息的函数)。回调函数必须引发给定的异常,或者返回一个包含两个元素的元组,该元组包含有问题的序列的替换项,以及一个整数,该整数表示应在原始字符串中恢复编码/解码的偏移量。

成功时返回 0,出错时返回 -1

PyObject *PyCodec_LookupError(const char *name)
返回值:新引用。属于 稳定 ABI 的一部分。

查找在 name 下注册的错误处理回调函数。作为特殊情况,可以传递 NULL,在这种情况下,将返回“strict”的错误处理回调函数。

PyObject *PyCodec_StrictErrors(PyObject *exc)
返回值:始终为 NULL。 稳定 ABI 的一部分。

引发 exc 作为异常。

PyObject *PyCodec_IgnoreErrors(PyObject *exc)
返回值:新引用。属于 稳定 ABI 的一部分。

忽略 Unicode 错误,跳过错误的输入。

PyObject *PyCodec_ReplaceErrors(PyObject *exc)
返回值:新引用。属于 稳定 ABI 的一部分。

将 Unicode 编码错误替换为 ?U+FFFD

PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc)
返回值:新引用。属于 稳定 ABI 的一部分。

将 Unicode 编码错误替换为 XML 字符引用。

PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc)
返回值:新引用。属于 稳定 ABI 的一部分。

将 Unicode 编码错误替换为反斜杠转义符(\x\u\U)。

PyObject *PyCodec_NameReplaceErrors(PyObject *exc)
返回值:新引用。 自 3.7 版本起成为 稳定 ABI 的一部分。

将 Unicode 编码错误替换为 \N{...} 转义符。

在 3.5 版本中添加。