###
1 Codec オブジェクト

`Codec` クラスは以下のメソッドを定義します。これらのメソッドは、 内部状態を持たないエンコーダ／デコーダ関数のインタフェースを定義します。

`encode`( | input[, errors])

  オブジェクト input エンコードし、(出力オブジェクト, 消費した 長さ) のタプルを返します。 codecs は Unicode 専用ではありませんが、 Unicode の文脈では、エンコーディングは Unicode オブジェクトを 特定の文字集合エンコーディング(たとえば `cp1252` や `iso-8859-1`)を使って文字列オブジェクトに変換します。

  errors は適用するエラー処理を定義します。`'strict'` 処理が デフォルトです。

  このメソッドは `Codec` に内部状態を保存してはなりません。効率 よくエンコード／デコードするために状態を保持しなければならない ような codecs には `StreamCodec` を使ってください。

  エンコーダは長さが 0 の入力を処理できねばなりません。この場合、 空のオブジェクトを出力オブジェクトとして返さねばなりません。

`decode`( | input[, errors])

  オブジェクト input をデコードし、(出力オブジェクト, 消費した長 さ) のタプルを返します。Unicode の文脈では、デコードは特定の文字集合 エンコーディングでエンコードされた文字列を Unicode オブジェクトに変換 します。

  input は `bf_getreadbuf` バッファスロットを提供するオブジェ クトでなければなりません。バッファスロットを提供しているオブジェクトには Python 文字列オブジェクト、バッファオブジェクト、メモリマップファイル があります。

  errors は適用するエラー処理を定義します。`'strict'` がデフ ォルト値です。

  このメソッドは、`Codec` インスタンスに内部状態を保存しては なりません。効率よくエンコード／デコードするために状態を保持しなけれ ばならないような codecs には `StreamCodec` を使ってください。

  デコーダは長さが 0 の入力を処理できねばなりません。この場合、 空のオブジェクトを出力オブジェクトとして返さねばなりません。

`IncrementalEncoder` クラスおよび `IncrementalDecoder` クラスは それぞれ漸増的エンコーディングおよびデコーディングのための基本的なインタフェースを提供 します。エンコーディング／デコーディングは内部状態を持たないエンコーダ／デコーダを 一度呼び出すことで行なわれるのではなく、漸増的エンコーダ／デコーダの `encode`/`decode` メソッドを複数回呼び出すことで行なわれます。 漸増的エンコーダ／デコーダはメソッド呼び出しの間エンコーディング／デコーディング処理の 進行を管理します。

`encode`/`decode` メソッド呼び出しの出力結果をまとめたものは、 入力をひとまとめにして内部状態を持たないエンコーダ／デコーダでエンコード／デコード したものと同じになります。