codec レジストリとサポート関数
******************************

int PyCodec_Register(PyObject *search_function)

   新しい codec 検索関数を登録します。

   副作用として、この関数は "encodings" パッケージが常に検索関数の先頭
   に来るように、まだロードされていない場合はロードします。

int PyCodec_KnownEncoding(const char *encoding)

   *encoding* のための登録された codec が存在するかどうかに応じて "1"
   か "0" を返します。

PyObject* PyCodec_Encode(PyObject *object, const char *encoding, const char *errors)

   汎用の codec ベースの encode API.

   *encoding* に応じて見つかったエンコーダ関数に対して *object* を渡し
   ます。エラーハンドリングメソッドは *errors* で指定します。 *errors*
   は *NULL* でもよく、その場合はその codec のデフォルトのメソッドが利
   用されます。エンコーダが見つからなかった場合は "LookupError" を発生
   させます。

PyObject* PyCodec_Decode(PyObject *object, const char *encoding, const char *errors)

   汎用の codec ベースの dencode API.

   *encoding* に応じて見つかったデコーダ関数に対して *object* を渡しま
   す。エラーハンドリングメソッドは *errors* で指定します。 *errors*
   は *NULL* でもよく、その場合はその codec のデフォルトのメソッドが利
   用されます。デコーダが見つからなかった場合は "LookupError" を発生さ
   せます。


コーデック検索API
=================

以下の関数では、文字列 *encoding* は全て小文字に変換することで、効率的
に、大文字小文字を無視した検索をします。コーデックが見つからない場合、
"KeyError" を設定して *NULL* を返します。

PyObject* PyCodec_Encoder(const char *encoding)

   与えられた *encoding* のエンコーダ関数を返します。

PyObject* PyCodec_Decoder(const char *encoding)

   与えられた *encoding* のデコーダ関数を返します。

PyObject* PyCodec_IncrementalEncoder(const char *encoding, const char *errors)

   与えられた *encoding* の "IncrementalEncoder" オブジェクトを返しま
   す。

PyObject* PyCodec_IncrementalDecoder(const char *encoding, const char *errors)

   与えられた *encoding* の "IncrementalDecoder" オブジェクトを返しま
   す。

PyObject* PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)

   与えられた *encoding* の "StreamReader" ファクトリ関数を返します。

PyObject* PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)

   与えられた *encoding* の "StreamWriter" ファクトリ関数を返します。


Unicode エラーハンドラ用レジストリ API
======================================

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

   エラーハンドルのためのコールバック関数 *error* を *name* で登録しま
   す。このコールバック関数は、コーデックがエンコードできない文字/デコ
   ードできないバイトに遭遇した時に、そのエンコード/デコード関数の呼び
   出しで *name* が指定されていたら呼び出されます。

   コールバックは1つの引数として、 "UnicodeEncodeError",
   "UnicodeDecodeError", "UnicodeTranslateError" のどれかのインスタン
   スを受け取ります。このインスタンスは問題のある文字列やバイト列に関
   する情報と、その元の文字列中のオフセットを持っています。(その情報を
   取得するための関数については Unicode 例外オブジェクト を参照してく
   ださい。) コールバックは渡された例外を発生させるか、2要素のタプルに
   問題のシーケンスの代替と、 encode/decode を再開する元の文字列中のオ
   フセットとなる整数を格納して返します。

   成功したら "0" を、エラー時は "-1" を返します。

PyObject* PyCodec_LookupError(const char *name)

   *name* で登録されたエラーハンドリングコールバック関数を検索します。
   特別な場合として、*NULL* が渡された場合、"strict" のエラーハンドリ
   ングコールバック関数を返します。

PyObject* PyCodec_StrictErrors(PyObject *exc)

   *exc* を例外として発生させます。

PyObject* PyCodec_IgnoreErrors(PyObject *exc)

   unicode エラーを無視し、問題の入力をスキップします。

PyObject* PyCodec_ReplaceErrors(PyObject *exc)

   unicode エラーを "?" か "U+FFFD" で置き換えます。

PyObject* PyCodec_XMLCharRefReplaceErrors(PyObject *exc)

   unicode encode エラーを XML文字参照で置き換えます。

PyObject* PyCodec_BackslashReplaceErrors(PyObject *exc)

   unicode encode エラーをバックスラッシュエスケープ ("\x", "\u",
   "\U") で置き換えます。
