코덱 등록소와 지원 함수
***********************

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* is passed through the encoder function found for the given
   *encoding* using the error handling method defined by *errors*.
   *errors* may be "NULL" to use the default method defined for the
   codec.  Raises a "LookupError" if no encoder can be found.

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

   일반 코덱 기반 디코딩 API.

   *object* is passed through the decoder function found for the given
   *encoding* using the error handling method defined by *errors*.
   *errors* may be "NULL" to use the default method defined for the
   codec.  Raises a "LookupError" if no encoder can be found.


코덱 조회 API
=============

In the following functions, the *encoding* string is looked up
converted to all lower-case characters, which makes encodings looked
up through this mechanism effectively case-insensitive.  If no codec
is found, a "KeyError" is set and "NULL" returned.

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

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

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

   Lookup the error handling callback function registered under
   *name*.  As a special case "NULL" can be passed, in which case the
   error handling callback for "strict" will be returned.

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에 추가.
