## 1 Codec 基底クラス

`codecs` では、codec のインタフェースを定義する一連の 基底クラスを用意して、Python 用 codec を簡単に自作できるように しています。

Python で何らかの codec を使えるようにするには、 状態なしエンコーダ、状態なしデコーダ、ストリームリーダ、 ストリームライタの 4 つのインタフェースを定義せねばなりません。 通常は、状態なしエンコーダとデコーダを再利用して ストリームリーダとライタのファイル・プロトコルを実装します。

`Codec` クラスは、状態なしエンコーダ・デコーダのインタフェースを 定義しています。

エラー処理の簡便化と標準化のため、`encode()` メソッドと `decode()` メソッドでは、errors 文字列引数を指定した 場合に別のエラー処理を行うような仕組みを実装してもかまいません。 全ての標準 Python codec では以下の文字列が定義され、実装されています。

Value | Meaning
--- | ---
`'strict'` | `UnicodeError` (または、そのサブクラス) を送出します - デフォルトの動作です。
`'ignore'` | その文字を無視し、次の文字から変換を再開します。
`'replace'` | 適当な文字で置換します - Python の組み込み Unicode codec のデコード時には公式の U+FFFD REPLACEMENT CHARACTER を、 エンコード時には '?' を使います。
`'xmlcharrefreplace'` | 適切な XML 文字参照で置換します (エンコードのみ)
`'backslashreplace'` | バックスラッシュつきのエスケープシーケンス で置換します (エンコードのみ)

codecs がエラーハンドラとして受け入れる値は`register_error` を 使って追加できます。