Registro de códec y funciones de soporte
****************************************

int PyCodec_Register(PyObject *search_function)

   Registra una nueva función de búsqueda de códec.

   Como efecto secundario, intenta cargar el paquete "encodings", si
   aún no lo ha hecho, para asegurarse de que siempre esté primero en
   la lista de funciones de búsqueda.

int PyCodec_KnownEncoding(const char *encoding)

   Retorna "1" o "0" dependiendo de si hay un códec registrado para el
   *encoding* dado. Esta función siempre finaliza con éxito.

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

   API de codificación genérica basada en códec.

   *object* se pasa a través de la función de codificador encontrada
   por el *encoding* dado usando el método de manejo de errores
   definido por *errors*. *errors* pueden ser "NULL" para usar el
   método predeterminado definido para el códec. Lanza un
   "LookupError" si no se puede encontrar el codificador.

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

   API de decodificación basada en códec genérico.

   *object* se pasa a través de la función de decodificador encontrada
   por el *encoding* dado usando el método de manejo de errores
   definido por *errors*. *errors* puede ser "NULL" para usar el
   método predeterminado definido para el códec. Lanza un
   "LookupError" si no se puede encontrar el codificador.


API de búsqueda de códec
========================

En las siguientes funciones, la cadena de caracteres *encoding* se
busca convertida a todos los caracteres en minúscula, lo que hace que
las codificaciones se busquen a través de este mecanismo sin
distinción entre mayúsculas y minúsculas. Si no se encuentra ningún
códec, se establece un "KeyError" y se retorna "NULL".

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

   Obtiene una función de codificador para el *encoding* dado.

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

   Obtiene una función de decodificador para el *encoding* dado.

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

   Obtiene un objeto "IncrementalEncoder" para el *encoding* dada.

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

   Obtiene un objeto "IncrementalDecoder" para el *encoding* dado.

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

   Obtiene una función de fábrica "StreamReader" para el *encoding*
   dado.

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

   Obtiene una función de fábrica "StreamWriter" por el *encoding*
   dado.


API de registro para controladores de errores de codificación Unicode
=====================================================================

int PyCodec_RegisterError(const char *name, PyObject *error)

   Registra la función de devolución de llamada de manejo de errores
   *error* bajo el nombre *name* dado. Esta función de devolución de
   llamada será llamada por un códec cuando encuentre caracteres no
   codificables / bytes no codificables y *name* se especifica como
   parámetro de error en la llamada a la función de codificación /
   decodificación.

   La devolución de llamada obtiene un único argumento, una instancia
   de "UnicodeEncodeError", "UnicodeDecodeError" o
   "UnicodeTranslateError" que contiene información sobre la secuencia
   problemática de caracteres o bytes y su desplazamiento en la cadena
   original (consulte Objectos Unicode de Excepción para funciones
   para extraer esta información). La devolución de llamada debe
   generar la excepción dada o retornar una tupla de dos elementos que
   contiene el reemplazo de la secuencia problemática, y un número
   entero que proporciona el desplazamiento en la cadena original en
   la que se debe reanudar la codificación / decodificación.

   Retorna "0" en caso de éxito, "-1" en caso de error.

PyObject* PyCodec_LookupError(const char *name)
    *Return value: New reference.*

   Busca la función de devolución de llamada de manejo de errores
   registrada con *name*. Como caso especial se puede pasar "NULL", en
   cuyo caso se retornará la devolución de llamada de manejo de
   errores para "estricto".

PyObject* PyCodec_StrictErrors(PyObject *exc)
    *Return value: Always NULL.*

   Lanza *exc* como una excepción.

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

   Ignora el error Unicode, omitiendo la entrada defectuosa.

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

   Reemplaza el error de codificación Unicode con "?" o "U+FFFD".

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

   Reemplaza el error de codificación Unicode con referencias de
   caracteres XML.

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

   Reemplaza el error de codificación Unicode con escapes de barra
   invertida ("\x", "\u" y "\U").

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

   Reemplaza el error de codificación Unicode con escapes "\N{...}".

   Nuevo en la versión 3.5.
