编解码器注册和支持函数

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 的一部分。

获取给定 *encoding* 的 IncrementalEncoder 对象。

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

获取给定 *encoding* 的 IncrementalDecoder 对象。

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

获取给定 *encoding* 的 StreamReader 工厂函数。

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

获取给定 *encoding* 的 StreamWriter 工厂函数。

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

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

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

回调函数接收一个参数,它是 UnicodeEncodeErrorUnicodeDecodeErrorUnicodeTranslateError 的实例,其中包含有关有问题的字符序列或字节及其在原始字符串中的偏移量的信息(有关提取此信息的函数,请参见 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 版本加入。