# 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 tiene é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.