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

int PyCodec_Register(PyObject *search_function)

   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_KnownEncoding(const char *encoding)

   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)
    *Return value: New reference.*

   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)
    *Return value: New reference.*

   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)
    *Return value: New reference.*

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

PyObject* PyCodec_Decoder(const char *encoding)
    *Return value: New reference.*

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

PyObject* PyCodec_IncrementalEncoder(const char *encoding, const char *errors)
    *Return value: New reference.*

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

PyObject* PyCodec_IncrementalDecoder(const char *encoding, const char *errors)
    *Return value: New reference.*

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

PyObject* PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)
    *Return value: New reference.*

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

PyObject* PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)
    *Return value: New reference.*

   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)

   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)
    *Return value: New reference.*

   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)
    *Return value: Always NULL.*

   Levanta *exc* como uma exceção.

PyObject* PyCodec_IgnoreErrors(PyObject *exc)
    *Return value: New reference.*

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

PyObject* PyCodec_ReplaceErrors(PyObject *exc)
    *Return value: New reference.*

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

PyObject* PyCodec_XMLCharRefReplaceErrors(PyObject *exc)
    *Return value: New reference.*

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

PyObject* PyCodec_BackslashReplaceErrors(PyObject *exc)
    *Return value: New reference.*

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

PyObject* PyCodec_NameReplaceErrors(PyObject *exc)
    *Return value: New reference.*

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

   Novo na versão 3.5.
