Registro de codec e funções de suporte
**************************************

int PyCodec_Register(PyObject *search_function)
    * Parte da ABI Estável.*

   Registra uma nova função de busca de codec.

   Como efeito colateral, tenta carregar o pacote "encodings", se isso
   ainda não tiver sido feito, com o propósito de garantir que ele
   sempre seja o primeiro na lista de funções de busca.

int PyCodec_Unregister(PyObject *search_function)
    * Parte da ABI Estável desde a versão 3.10.*

   Cancela o registro de uma função de busca de codec e limpa o cache
   de registro. Se a função de busca não está registrada, não faz
   nada. Retorna 0 no sucesso. Levanta uma exceção e retorna -1 em
   caso de erro.

   Novo na versão 3.10.

int PyCodec_KnownEncoding(const char *encoding)
    * Parte da ABI Estável.*

   Retorna "1" ou "0" dependendo se há um codec registrado para a dada
   codificação *encoding*. Essa função sempre é bem-sucedida.

PyObject *PyCodec_Encode(PyObject *object, const char *encoding, const char *errors)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   API de codificação baseada em codec genérico.

   *object* é passado através da função de codificação encontrada para
   a codificação fornecida por meio de *encoding*, usando o método de
   tratamento de erros definido por *errors*. *errors* pode ser "NULL"
   para usar o método padrão definido para o codec. Levanta um
   "LookupError" se nenhum codificador puder ser encontrado.

PyObject *PyCodec_Decode(PyObject *object, const char *encoding, const char *errors)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   API de decodificação baseada em decodificador genérico.

   *object* é passado através da função de decodificação encontrada
   para a codificação fornecida por meio de *encoding*, usando o
   método de tratamento de erros definido por *errors*. *errors* pode
   ser "NULL" para usar o método padrão definido para o codec. Levanta
   um "LookupError" se nenhum codificador puder ser encontrado.


API de pesquisa de codec
========================

Nas funções a seguir, a string *encoding* é pesquisada com todos os
caracteres sendo convertidos para minúsculo, o que faz com que as
codificações pesquisadas por esse mecanismo não façam distinção entre
maiúsculas e minúsculas. Se nenhum codec for encontrado, um "KeyError"
é definido e "NULL" é retornado.

PyObject *PyCodec_Encoder(const char *encoding)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Obtém uma função de codificação para o *encoding* dado.

PyObject *PyCodec_Decoder(const char *encoding)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Obtém uma função de decodificação para o *encoding* dado.

PyObject *PyCodec_IncrementalEncoder(const char *encoding, const char *errors)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Obtém um objeto "IncrementalEncoder" para o *encoding* dado.

PyObject *PyCodec_IncrementalDecoder(const char *encoding, const char *errors)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Obtém um objeto "IncrementalDecoder" para o *encoding* dado.

PyObject *PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Obtém uma função de fábrica "StreamReader" para o *encoding* dado.

PyObject *PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Obtém uma função de fábrica "StreamWriter" para o *encoding* dado.


API de registro de tratamentos de erros de decodificação Unicode
================================================================

int PyCodec_RegisterError(const char *name, PyObject *error)
    * Parte da ABI Estável.*

   Registra a função de retorno de chamada de tratamento de *erro*
   para o *nome* fornecido. Esta chamada de função é invocada por um
   codificador quando encontra caracteres/bytes indecodificáveis e
   *nome* é especificado como o parâmetro de erro na chamada da função
   de codificação/decodificação.

   O retorno de chamada obtém um único argumento, uma instância de
   "UnicodeEncodeError", "UnicodeDecodeError" ou
   "UnicodeTranslateError" que contém informações sobre a sequencia
   problemática de caracteres ou bytes e seu deslocamento na string
   original (consulte Objetos de exceção Unicode para funções que
   extraem essa informação). A função de retorno de chamada deve
   levantar a exceção dada, ou retornar uma tupla de dois itens
   contendo a substituição para a sequência problemática, e um inteiro
   fornecendo o deslocamento na string original na qual a
   codificação/decodificação deve ser retomada.

   Retorna "0" em caso de sucesso, "-1" em caso de erro.

PyObject *PyCodec_LookupError(const char *name)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Pesquisa a função de retorno de chamada de tratamento de erros
   registrada em *name*. Como um caso especial, "NULL" pode ser
   passado; nesse caso, o erro no tratamento de retorno de chamada
   para "strict" será retornado.

PyObject *PyCodec_StrictErrors(PyObject *exc)
    *Retorna valor: Sempre NULL.** Parte da ABI Estável.*

   Levanta *exc* como uma exceção.

PyObject *PyCodec_IgnoreErrors(PyObject *exc)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Ignora o erro de unicode, ignorando a entrada que causou o erro.

PyObject *PyCodec_ReplaceErrors(PyObject *exc)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Substitui o erro de unicode por "?" ou "U+FFFD".

PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Substitui o erro de unicode por caracteres da referência XML.

PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc)
    *Retorna valor: Nova referência.** Parte da ABI Estável.*

   Substitui o erro de unicode com escapes de barra invertida ("\x",
   "\u" e "\U").

PyObject *PyCodec_NameReplaceErrors(PyObject *exc)
    *Retorna valor: Nova referência.** Parte da ABI Estável desde a
   versão 3.7.*

   Substitui os erros de codificação unicode com escapes "\N{...}".

   Novo na versão 3.5.
