# 코덱 등록소와 지원 함수

int `PyCodec_Register`(PyObject *search_function)

  새로운 코덱 검색 함수를 등록합니다.

  부작용으로, 아직 로드되지 않았다면, `encodings` 패키지를 로드하여 항상 검색 함수 목록의 첫 번째 항목이 되도록 합니다.

int `PyCodec_KnownEncoding`(const char *encoding)

  지정된 encoding에 대해 등록된 코덱이 있는지에 따라 `1` 이나 `0`을 반환합니다. 이 함수는 항상 성공합니다.

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

  일반 코덱 기반 인코딩 API.

  object는 errors로 정의된 에러 처리 방법을 사용하여 지정된 encoding에 대해 발견된 인코더 함수로 전달됩니다. 코덱에 정의된 기본 방법을 사용하기 위해 errors가 `NULL` 일 수 있습니다. 인코더를 찾을 수 없으면 `LookupError`를 발생시킵니다.

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

  일반 코덱 기반 디코딩 API.

  object는 errors로 정의된 에러 처리 방법을 사용하여 지정된 encoding에 대해 발견된 디코더 함수로 전달됩니다. 코덱에 정의된 기본 방법을 사용하기 위해 errors가 `NULL` 일 수 있습니다. 인코더를 찾을 수 없으면 `LookupError`를 발생시킵니다.

## 코덱 조회 API

다음 함수에서, encoding 문자열은 모두 소문자로 변환되어 조회되므로, 이 메커니즘을 통한 인코딩 조회는 대소문자를 구분하지 않게 됩니다. 코덱이 없으면, `KeyError`가 설정되고 `NULL`이 반환됩니다.

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

  주어진 encoding에 대한 인코더 함수를 가져옵니다.

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

  주어진 encoding에 대한 디코더 함수를 가져옵니다.

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

  지정된 encoding에 대한 `IncrementalEncoder` 객체를 가져옵니다.

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

  지정된 encoding에 대한 `IncrementalDecoder` 객체를 가져옵니다.

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

  지정된 encoding에 대한 `StreamReader` 팩토리 함수를 가져옵니다.

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

  지정된 encoding에 대한 `StreamWriter` 팩토리 함수를 가져옵니다.

## 유니코드 인코딩 에러 처리기용 등록소 API

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

  지정된 name 으로 에러 처리 콜백 함수 error를 등록합니다. 코덱이 인코딩할 수 없는 문자/디코딩할 수 없는 바이트열을 발견하고, 인코드/디코드 함수를 호출할 때 name이 error 매개 변수로 지정되었을 때 이 콜백 함수를 호출합니다.

  콜백은 하나의 인자로 `UnicodeEncodeError`, `UnicodeDecodeError` 또는 `UnicodeTranslateError`의 인스턴스를 받아들이는데, 문제가 되는 문자나 바이트의 시퀀스와 이들의 원본 문자열에서의 오프셋에 대한 정보를 담고 있습니다 (이 정보를 추출하는 함수는 유니코드 예외 객체를 참조하세요). 콜백은 주어진 예외를 발생시키거나, 문제가 있는 시퀀스의 대체와 원래 문자열에서 인코딩/디코딩을 다시 시작해야 하는 오프셋을 제공하는 정수를 포함하는 두 항목 튜플을 반환해야 합니다.

  성공하면 `0`을, 에러면 `-1`을 반환합니다.

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

  name 으로 등록된 에러 처리 콜백 함수를 찾습니다. 특수한 경우로 `NULL`이 전달 될 수 있는데, 이때는 “strict” 에 대한 에러 처리 콜백이 반환됩니다.

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

  exc를 예외로 발생시킵니다.

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

  잘못된 입력을 건너뛰고, 유니코드 에러를 무시합니다.

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

  유니코드 인코딩 에러를 `?` 나 `U+FFFD`로 치환합니다.

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

  유니코드 인코딩 에러를 XML 문자 참조로 치환합니다.

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

  유니코드 인코딩 에러를 백 슬래시 이스케이프(`\x`, `\u` 및 `\U`)로 치환합니다.

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

  유니코드 인코딩 에러를 `\N{...}` 이스케이프로 치환합니다.

  버전 3.5에 추가.