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 を 使って追加できます。