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

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

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

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

int PyCodec_Unregister(PyObject *search_function)
稳定 ABI 的一部分,从版本 3.10 开始。

注销编解码器搜索函数并清除注册表的缓存。如果搜索函数未注册,则不执行任何操作。成功时返回 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指定为错误参数时,此回调函数将被调用。

回调函数接收一个参数,一个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 的一部分。

?U+FFFD 替换 Unicode 编码错误。

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

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

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

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

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

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

在 3.5 版本中添加。