编解码器注册和支持Function

  • int PyCodec_Register(PyObject ** search_function *)
    • 注册新的编解码器搜索Function。

副作用是,这会try加载encodings软件包(如果尚未加载),以确保它始终在搜索Function列表中排在第一位。

  • int PyCodec_KnownEncoding(const char ** encoding *)

    • 根据给定的* encoding *是否存在已注册的编解码器,返回10
  • PyObject * PyCodec_Encode(PyObject *object ,const char encoding *,const char ** errors *)

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

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

  • PyObject * PyCodec_Decode(PyObject *object ,const char encoding *,const char ** errors *)
    • 基于通用编解码器的解码 API。

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

编解码器查找 API

在以下函数中,* encoding 字符串被查找转换为所有小写字符,这使得pass此机制查找的编码实际上不区分大小写。如果未找到编解码器,则设置KeyError并返回 NULL *。

  • PyObject * PyCodec_Encoder(const char ** encoding *)

    • 获取给定* encoding *的编码器Function。
  • PyObject * PyCodec_Decoder(const char ** encoding *)

    • 获取给定* encoding *的解码器Function。
  • PyObject * PyCodec_IncrementalEncoder(const char *encoding ,const char errors *)

  • PyObject * PyCodec_IncrementalDecoder(const char *encoding ,const char errors *)

  • PyObject * PyCodec_StreamReader(const char *encoding PyObject stream *,const char ** errors *)

  • PyObject * PyCodec_StreamWriter(const char *encoding PyObject stream *,const char ** errors *)

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

  • int PyCodec_RegisterError(const char *name PyObject error *)
    • 在给定的* name 下注册错误处理回调函数 error 。当遇到无法编码的字符/无法解码的字节,并且在编码/解码Function的调用中将 name *指定为错误参数时,编解码器将调用此回调函数。

回调仅获取一个参数,即UnicodeEncodeErrorUnicodeDecodeErrorUnicodeTranslateError的实例,该实例保存有关有问题的字符或字节序列及其在原始字符串中的偏移量的信息(有关提取此信息的函数,请参见Unicode 异常对象)。回调必须引发给定的异常,或者返回一个包含有问题序列的替换项的两个项目 Tuples,以及一个给出原始字符串中应恢复编码/解码的偏移量的整数。

成功返回0,错误返回-1

  • PyObject * PyCodec_LookupError(const char ** name *)

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

    • 提高* exc *作为 exception。
  • PyObject * PyCodec_IgnoreErrors(PyObject ** exc *)

    • 忽略 unicode 错误,跳过错误的 Importing。
  • PyObject * PyCodec_ReplaceErrors(PyObject ** exc *)

    • 将 unicode 编码错误替换为?U+FFFD
  • PyObject * PyCodec_XMLCharRefReplaceErrors(PyObject ** exc *)

    • 用 XML 字符引用替换 unicode 编码错误。
  • PyObject * PyCodec_BackslashReplaceErrors(PyObject ** exc *)

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