"codecs" — codec レジストリと基底クラス
***************************************

This module defines base classes for standard Python codecs (encoders
and decoders) and provides access to the internal Python codec
registry which manages the codec and error handling lookup process.

It defines the following functions:

codecs.encode(obj[, encoding[, errors]])

   Encodes *obj* using the codec registered for *encoding*. The
   default encoding is "'ascii'".

   希望のエラー処理スキームを *errors* に設定することができます。デフ
   ォルトのエラーハンドラ (エラー処理関数) は "'strict'" です。これは
   エンコードエラーは "ValueError" (もしくは "UnicodeEncodeError" のよ
   うな、より codec に固有のサブクラス) を送出することを意味します。
   codec エラー処理についてのより詳しい情報は Codec 基底クラス を参照
   してください。

   バージョン 2.4 で追加.

codecs.decode(obj[, encoding[, errors]])

   Decodes *obj* using the codec registered for *encoding*. The
   default encoding is "'ascii'".

   希望のエラー処理スキームを *errors* に設定することができます。デフ
   ォルトのエラーハンドラは "'strict'" です。これはデコードエラーは
   "ValueError" (もしくは "UnicodeDecodeError" のような、より codec に
   固有のサブクラス) を送出することを意味します。codec エラー処理につ
   いてのより詳しい情報は Codec 基底クラス を参照してください。

   バージョン 2.4 で追加.

codecs.register(search_function)

   Register a codec search function. Search functions are expected to
   take one argument, the encoding name in all lower case letters, and
   return a "CodecInfo" object having the following attributes:

   * "name" The name of the encoding;

   * "encode" The stateless encoding function;

   * "decode" The stateless decoding function;

   * "incrementalencoder" An incremental encoder class or factory
     function;

   * "incrementaldecoder" An incremental decoder class or factory
     function;

   * "streamwriter" A stream writer class or factory function;

   * "streamreader" A stream reader class or factory function.

   The various functions or classes take the following arguments:

   *encode* and *decode*: These must be functions or methods which
   have the same interface as the "encode()"/"decode()" methods of
   Codec instances (see Codec Interface). The functions/methods are
   expected to work in a stateless mode.

   *incrementalencoder* and *incrementaldecoder*: These have to be
   factory functions providing the following interface:

      "factory(errors='strict')"

   The factory functions must return objects providing the interfaces
   defined by the base classes "IncrementalEncoder" and
   "IncrementalDecoder", respectively. Incremental codecs can maintain
   state.

   *streamreader* and *streamwriter*: These have to be factory
   functions providing the following interface:

      "factory(stream, errors='strict')"

   The factory functions must return objects providing the interfaces
   defined by the base classes "StreamReader" and "StreamWriter",
   respectively. Stream codecs can maintain state.

   Possible values for errors are

   * "'strict'": raise an exception in case of an encoding error

   * "'replace'": replace malformed data with a suitable replacement
     marker, such as "'?'" or "'\ufffd'"

   * "'ignore'": ignore malformed data and continue without further
     notice

   * "'xmlcharrefreplace'": replace with the appropriate XML
     character reference (for encoding only)

   * "'backslashreplace'": replace with backslashed escape sequences
     (for encoding only)

   as well as any other error handling name defined via
   "register_error()".

   In case a search function cannot find a given encoding, it should
   return "None".

codecs.lookup(encoding)

   Looks up the codec info in the Python codec registry and returns a
   "CodecInfo" object as defined above.

   エンコーディングの検索は、まずレジストリのキャッシュから行います。
   見つからなければ、登録されている検索関数のリストから探します。
   "CodecInfo" オブジェクトが一つも見つからなければ "LookupError" を送
   出します。見つかったら、その "CodecInfo" オブジェクトはキャッシュに
   保存され、呼び出し側に返されます。

To simplify access to the various codecs, the module provides these
additional functions which use "lookup()" for the codec lookup:

codecs.getencoder(encoding)

   与えられたエンコーディングに対する codec を検索し、エンコーダ関数を
   返します。

   エンコーディングが見つからなければ "LookupError" を送出します。

codecs.getdecoder(encoding)

   与えられたエンコーディングに対する codec を検索し、デコーダ関数を返
   します。

   エンコーディングが見つからなければ "LookupError" を送出します。

codecs.getincrementalencoder(encoding)

   与えられたエンコーディングに対する codec を検索し、インクリメンタル
   ・エンコーダクラスまたはファクトリ関数を返します。

   エンコーディングが見つからないか、 codec がインクリメンタル・エンコ
   ーダをサポートしなければ "LookupError" を送出します。

   バージョン 2.5 で追加.

codecs.getincrementaldecoder(encoding)

   与えられたエンコーディングに対する codec を検索し、インクリメンタル
   ・デコーダクラスまたはファクトリ関数を返します。

   エンコーディングが見つからないか、 codec がインクリメンタル・デコー
   ダをサポートしなければ "LookupError" を送出します。

   バージョン 2.5 で追加.

codecs.getreader(encoding)

   Look up the codec for the given encoding and return its
   StreamReader class or factory function.

   エンコーディングが見つからなければ "LookupError" を送出します。

codecs.getwriter(encoding)

   Look up the codec for the given encoding and return its
   StreamWriter class or factory function.

   エンコーディングが見つからなければ "LookupError" を送出します。

codecs.register_error(name, error_handler)

   Register the error handling function *error_handler* under the name
   *name*. *error_handler* will be called during encoding and decoding
   in case of an error, when *name* is specified as the errors
   parameter.

   For encoding *error_handler* will be called with a
   "UnicodeEncodeError" instance, which contains information about the
   location of the error. The error handler must either raise this or
   a different exception or return a tuple with a replacement for the
   unencodable part of the input and a position where encoding should
   continue. The encoder will encode the replacement and continue
   encoding the original input at the specified position. Negative
   position values will be treated as being relative to the end of the
   input string. If the resulting position is out of bound an
   "IndexError" will be raised.

   Decoding and translating works similar, except "UnicodeDecodeError"
   or "UnicodeTranslateError" will be passed to the handler and that
   the replacement from the error handler will be put into the output
   directly.

codecs.lookup_error(name)

   名前 *name* で登録済みのエラーハンドラを返します。

   エラーハンドラが見つからなければ "LookupError" を送出します。

codecs.strict_errors(exception)

   Implements the "strict" error handling: each encoding or decoding
   error raises a "UnicodeError".

codecs.replace_errors(exception)

   Implements the "replace" error handling: malformed data is replaced
   with a suitable replacement character such as "'?'" in bytestrings
   and "'\ufffd'" in Unicode strings.

codecs.ignore_errors(exception)

   Implements the "ignore" error handling: malformed data is ignored
   and encoding or decoding is continued without further notice.

codecs.xmlcharrefreplace_errors(exception)

   Implements the "xmlcharrefreplace" error handling (for encoding
   only): the unencodable character is replaced by an appropriate XML
   character reference.

codecs.backslashreplace_errors(exception)

   Implements the "backslashreplace" error handling (for encoding
   only): the unencodable character is replaced by a backslashed
   escape sequence.

To simplify working with encoded files or stream, the module also
defines these utility functions:

codecs.open(filename, mode[, encoding[, errors[, buffering]]])

   Open an encoded file using the given *mode* and return a wrapped
   version providing transparent encoding/decoding.  The default file
   mode is "'r'" meaning to open the file in read mode.

   注釈: The wrapped version will only accept the object format
     defined by the codecs, i.e. Unicode objects for most built-in
     codecs. Output is also codec-dependent and will usually be
     Unicode as well.

   注釈: Files are always opened in binary mode, even if no binary
     mode was specified.  This is done to avoid data loss due to
     encodings using 8-bit values.  This means that no automatic
     conversion of "'\n'" is done on reading and writing.

   *encoding* specifies the encoding which is to be used for the file.

   エラーハンドリングのために *errors* を渡すことができます。これはデ
   フォルトでは "'strict'" で、エンコード時にエラーがあれば
   "ValueError" を送出します。

   *buffering* は組み込み関数 "open()" の場合と同じ意味を持ちます。デ
   フォルトでは行バッファリングです。

codecs.EncodedFile(file, input[, output[, errors]])

   Return a wrapped version of file which provides transparent
   encoding translation.

   Strings written to the wrapped file are interpreted according to
   the given *input* encoding and then written to the original file as
   strings using the *output* encoding. The intermediate encoding will
   usually be Unicode but depends on the specified codecs.

   If *output* is not given, it defaults to *input*.

   エラーハンドリングのために *errors* を渡すことができます。これはデ
   フォルトでは "'strict'" で、エンコード時にエラーがあれば
   "ValueError" を送出します。

codecs.iterencode(iterable, encoding[, errors])

   Uses an incremental encoder to iteratively encode the input
   provided by *iterable*. This function is a *generator*.  *errors*
   (as well as any other keyword argument) is passed through to the
   incremental encoder.

   バージョン 2.5 で追加.

codecs.iterdecode(iterable, encoding[, errors])

   Uses an incremental decoder to iteratively decode the input
   provided by *iterable*. This function is a *generator*.  *errors*
   (as well as any other keyword argument) is passed through to the
   incremental decoder.

   バージョン 2.5 で追加.

このモジュールは以下のような定数も定義しています。プラットフォーム依存
なファイルを読み書きするのに役立ちます:

codecs.BOM
codecs.BOM_BE
codecs.BOM_LE
codecs.BOM_UTF8
codecs.BOM_UTF16
codecs.BOM_UTF16_BE
codecs.BOM_UTF16_LE
codecs.BOM_UTF32
codecs.BOM_UTF32_BE
codecs.BOM_UTF32_LE

   These constants define various encodings of the Unicode byte order
   mark (BOM) used in UTF-16 and UTF-32 data streams to indicate the
   byte order used in the stream or file and in UTF-8 as a Unicode
   signature. "BOM_UTF16" is either "BOM_UTF16_BE" or "BOM_UTF16_LE"
   depending on the platform’s native byte order, "BOM" is an alias
   for "BOM_UTF16", "BOM_LE" for "BOM_UTF16_LE" and "BOM_BE" for
   "BOM_UTF16_BE". The others represent the BOM in UTF-8 and UTF-32
   encodings.


Codec 基底クラス
================

The "codecs" module defines a set of base classes which define the
interface and can also be used to easily write your own codecs for use
in Python.

Each codec has to define four interfaces to make it usable as codec in
Python: stateless encoder, stateless decoder, stream reader and stream
writer. The stream reader and writers typically reuse the stateless
encoder/decoder to implement the file protocols.

The "Codec" class defines the interface for stateless
encoders/decoders.

To simplify and standardize error handling, the "encode()" and
"decode()" methods may implement different error handling schemes by
providing the *errors* string argument.  The following string values
are defined and implemented by all standard Python codecs:

+---------------------------+-------------------------------------------------+
| 値                        | 意味                                            |
+===========================+=================================================+
| "'strict'"                | Raise "UnicodeError" (or a subclass); this is   |
|                           | the default.                                    |
+---------------------------+-------------------------------------------------+
| "'ignore'"                | Ignore the character and continue with the      |
|                           | next.                                           |
+---------------------------+-------------------------------------------------+
| "'replace'"               | Replace with a suitable replacement character;  |
|                           | Python will use the official U+FFFD REPLACEMENT |
|                           | CHARACTER for the built-in Unicode codecs on    |
|                           | decoding and 『?』 on encoding.                 |
+---------------------------+-------------------------------------------------+
| "'xmlcharrefreplace'"     | Replace with the appropriate XML character      |
|                           | reference (only for encoding).                  |
+---------------------------+-------------------------------------------------+
| "'backslashreplace'"      | Replace with backslashed escape sequences (only |
|                           | for encoding).                                  |
+---------------------------+-------------------------------------------------+

The set of allowed values can be extended via "register_error()".


Codec Objects
-------------

The "Codec" class defines these methods which also define the function
interfaces of the stateless encoder and decoder:

Codec.encode(input[, errors])

   Encodes the object *input* and returns a tuple (output object,
   length consumed). While codecs are not restricted to use with
   Unicode, in a Unicode context, encoding converts a Unicode object
   to a plain string using a particular character set encoding (e.g.,
   "cp1252" or "iso-8859-1").

   *errors* defines the error handling to apply. It defaults to
   "'strict'" handling.

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

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

Codec.decode(input[, errors])

   Decodes the object *input* and returns a tuple (output object,
   length consumed). In a Unicode context, decoding converts a plain
   string encoded using a particular character set encoding to a
   Unicode object.

   *input* must be an object which provides the "bf_getreadbuf" buffer
   slot. Python strings, buffer objects and memory mapped files are
   examples of objects providing this slot.

   *errors* defines the error handling to apply. It defaults to
   "'strict'" handling.

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

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

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

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


IncrementalEncoder オブジェクト
-------------------------------

バージョン 2.5 で追加.

"IncrementalEncoder" クラスは入力を複数ステップでエンコードするのに使
われます。全てのインクリメンタル・エンコーダが Python codec レジストリ
と互換性を持つために定義すべきメソッドとして、このクラスには以下のメソ
ッドが定義されています。

class codecs.IncrementalEncoder([errors])

   "IncrementalEncoder" インスタンスのコンストラクタ。

   全てのインクリメンタル・エンコーダはこのコンストラクタインタフェー
   スを提供しなければなりません。さらにキーワード引数を付け加えるのは
   構いませんが、Python codec レジストリで利用されるのはここで定義され
   ているものだけです。

   The "IncrementalEncoder" may implement different error handling
   schemes by providing the *errors* keyword argument. These
   parameters are predefined:

   * "'strict'" Raise "ValueError" (or a subclass); this is the
     default.

   * "'ignore'" Ignore the character and continue with the next.

   * "'replace'" Replace with a suitable replacement character

   * "'xmlcharrefreplace'" Replace with the appropriate XML
     character reference

   * "'backslashreplace'" Replace with backslashed escape sequences.

   *errors* 引数は、同名の属性に代入されます。この属性を変更すると、
   "IncrementalEncoder" オブジェクトが生きている間に、異なるエラー処理
   方法に切り替えることができるようになります。

   *errors* 引数に許される値の集合は "register_error()" で拡張できます
   。

   encode(object[, final])

      *object* を(エンコーダの現在の状態を考慮に入れて)エンコードし、
      得られたエンコードされたオブジェクトを返します。 "encode()" 呼び
      出しがこれで最後という時には *final* は真でなければなりません(デ
      フォルトは偽です)。

   reset()

      Reset the encoder to the initial state.


IncrementalDecoder オブジェクト
-------------------------------

"IncrementalDecoder" クラスは入力を複数ステップでデコードするのに使わ
れます。全てのインクリメンタル・デコーダが Python codec レジストリと互
換性を持つために定義すべきメソッドとして、このクラスには以下のメソッド
が定義されています。

class codecs.IncrementalDecoder([errors])

   "IncrementalDecoder" インスタンスのコンストラクタ。

   全てのインクリメンタル・デコーダはこのコンストラクタインタフェース
   を提供しなければなりません。さらにキーワード引数を付け加えるのは構
   いませんが、Python codec レジストリで利用されるのはここで定義されて
   いるものだけです。

   The "IncrementalDecoder" may implement different error handling
   schemes by providing the *errors* keyword argument. These
   parameters are predefined:

   * "'strict'" Raise "ValueError" (or a subclass); this is the
     default.

   * "'ignore'" Ignore the character and continue with the next.

   * "'replace'" Replace with a suitable replacement character.

   *errors* 引数は、同名の属性に代入されます。この属性を変更すると、
   "IncrementalDecoder" オブジェクトが生きている間に、異なるエラー処理
   方法に切り替えることができるようになります。

   *errors* 引数に許される値の集合は "register_error()" で拡張できます
   。

   decode(object[, final])

      *object* を(デコーダの現在の状態を考慮に入れて)デコードし、得ら
      れたデコードされたオブジェクトを返します。 "decode()" 呼び出しが
      これで最後という時には *final* は真でなければなりません(デフォル
      トは偽です)。もし *final* が真ならばデコーダは入力をデコードし切
      り全てのバッファをフラッシュしなければなりません。そうできない場
      合(たとえば入力の最後に不完全なバイト列があるから)、デコーダは内
      部状態を持たない場合と同じようにエラーの取り扱いを開始しなければ
      なりません(例外を送出するかもしれません)。

   reset()

      デコーダを初期状態にリセットします。

"StreamWriter" と "StreamReader" クラスは、新しいエンコーディングサブ
モジュールを非常に簡単に実装するのに使用できる、一般的なインターフェイ
スを提供します。実装例は "encodings.utf_8" をご覧ください。


StreamWriter オブジェクト
-------------------------

"StreamWriter" クラスは "Codec" のサブクラスで、以下のメソッドを定義し
ています。全てのストリームライタは、 Python の codec レジストリとの互
換性を保つために、これらのメソッドを定義する必要があります。

class codecs.StreamWriter(stream[, errors])

   "StreamWriter" インスタンスのコンストラクタです。

   全てのストリームライタはコンストラクタとしてこのインタフェースを提
   供しなければなりません。キーワード引数を追加しても構いませんが、
   Python の codec レジストリはここで定義されている引数だけを使います
   。

   *stream* must be a file-like object open for writing binary data.

   The "StreamWriter" may implement different error handling schemes
   by providing the *errors* keyword argument. These parameters are
   predefined:

   * "'strict'" Raise "ValueError" (or a subclass); this is the
     default.

   * "'ignore'" Ignore the character and continue with the next.

   * "'replace'" Replace with a suitable replacement character

   * "'xmlcharrefreplace'" Replace with the appropriate XML
     character reference

   * "'backslashreplace'" Replace with backslashed escape sequences.

   *errors* 引数は、同名の属性に代入されます。この属性を変更すると、
   "StreamWriter" オブジェクトが生きている間に、異なるエラー処理に変更
   できます。

   *errors* 引数に許される値の集合は "register_error()" で拡張できます
   。

   write(object)

      *object* の内容をエンコードしてストリームに書き出します。

   writelines(list)

      Writes the concatenated list of strings to the stream (possibly
      by reusing the "write()" method).

   reset()

      状態保持に使われていた codec のバッファを強制的に出力してリセッ
      トします。

      このメソッドが呼び出された場合、出力先データをきれいな状態にし、
      わざわざストリーム全体を再スキャンして状態を元に戻さなくても新し
      くデータを追加できるようにしなければなりません。

ここまでで挙げたメソッドの他にも、 "StreamWriter" では背後にあるストリ
ームの他の全てのメソッドや属性を継承しなければなりません。


StreamReader オブジェクト
-------------------------

"StreamReader" クラスは "Codec" のサブクラスで、以下のメソッドを定義し
ています。全てのストリームリーダは、 Python の codec レジストリとの互
換性を保つために、これらのメソッドを定義する必要があります。

class codecs.StreamReader(stream[, errors])

   "StreamReader" インスタンスのコンストラクタです。

   全てのストリームリーダはコンストラクタとしてこのインタフェースを提
   供しなければなりません。キーワード引数を追加しても構いませんが、
   Python の codec レジストリはここで定義されている引数だけを使います
   。

   *stream* must be a file-like object open for reading (binary) data.

   The "StreamReader" may implement different error handling schemes
   by providing the *errors* keyword argument. These parameters are
   defined:

   * "'strict'" Raise "ValueError" (or a subclass); this is the
     default.

   * "'ignore'" Ignore the character and continue with the next.

   * "'replace'" Replace with a suitable replacement character.

   *errors* 引数は、同名の属性に代入されます。この属性を変更すると、
   "StreamReader" オブジェクトが生きている間に、異なるエラー処理に変更
   できます。

   *errors* 引数に許される値の集合は "register_error()" で拡張できます
   。

   read([size[, chars[, firstline]]])

      ストリームからのデータをデコードし、デコード済のオブジェクトを返
      します。

      *chars* indicates the number of characters to read from the
      stream. "read()" will never return more than *chars* characters,
      but it might return less, if there are not enough characters
      available.

      *size* indicates the approximate maximum number of bytes to read
      from the stream for decoding purposes. The decoder can modify
      this setting as appropriate. The default value -1 indicates to
      read and decode as much as possible.  *size* is intended to
      prevent having to decode huge files in one step.

      *firstline* indicates that it would be sufficient to only return
      the first line, if there are decoding errors on later lines.

      このメソッドは貪欲な読み込み戦略を取るべきです。すなわち、エンコ
      ーディング定義と size の値が許す範囲で、できるだけ多くのデータを
      読むべきだということです。たとえば、ストリーム上にエンコーディン
      グの終端や状態の目印があれば、それも読み込みます。

      バージョン 2.4 で変更: *chars* argument added.

      バージョン 2.4.2 で変更: *firstline* argument added.

   readline([size[, keepends]])

      入力ストリームから1行読み込み、デコード済みのデータを返します。

      *size* が与えられた場合、ストリームの "read()" メソッドに size
      引数として渡されます。

      *keepends* が偽の場合には行末の改行が削除された行が返ります。

      バージョン 2.4 で変更: *keepends* argument added.

   readlines([sizehint[, keepends]])

      入力ストリームから全ての行を読み込み、行のリストとして返します。

      *keepends* が真なら、改行は、codec のデコーダメソッドを使って実
      装され、リスト要素の中に含まれます。

      *sizehint* が与えられた場合、ストリームの "read()" メソッドに
      *size* 引数として渡されます。

   reset()

      状態保持に使われた codec のバッファをリセットします。

      ストリームの読み位置を再設定してはならないので注意してください。
      このメソッドはデコードの際にエラーから復帰できるようにするための
      ものです。

ここまでで挙げたメソッドの他にも、 "StreamReader" では背後にあるストリ
ームの他の全てのメソッドや属性を継承しなければなりません。

The next two base classes are included for convenience. They are not
needed by the codec registry, but may provide useful in practice.


StreamReaderWriter オブジェクト
-------------------------------

The "StreamReaderWriter" allows wrapping streams which work in both
read and write modes.

"lookup()" 関数が返すファクトリ関数を使って、インスタンスを生成すると
いう設計です。

class codecs.StreamReaderWriter(stream, Reader, Writer, errors)

   "StreamReaderWriter" インスタンスを生成します。 *stream* はファイル
   類似のオブジェクトです。 *Reader* と *Writer* は、それぞれ
   "StreamReader" と "StreamWriter" インタフェースを提供するファクトリ
   関数かファクトリクラスでなければなりません。エラー処理は、ストリー
   ムリーダとライタで定義したものと同じように行われます。

"StreamReaderWriter" インスタンスは、 "StreamReader" クラスと
"StreamWriter" クラスを合わせたインタフェースを継承します。元になるス
トリームからは、他のメソッドや属性を継承します。


StreamRecoder オブジェクト
--------------------------

The "StreamRecoder" provide a frontend - backend view of encoding data
which is sometimes useful when dealing with different encoding
environments.

"lookup()" 関数が返すファクトリ関数を使って、インスタンスを生成すると
いう設計です。

class codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)

   Creates a "StreamRecoder" instance which implements a two-way
   conversion: *encode* and *decode* work on the frontend (the input
   to "read()" and output of "write()") while *Reader* and *Writer*
   work on the backend (reading and writing to the stream).

   You can use these objects to do transparent direct recodings from
   e.g. Latin-1 to UTF-8 and back.

   *stream* must be a file-like object.

   *encode*, *decode* must adhere to the "Codec" interface. *Reader*,
   *Writer* must be factory functions or classes providing objects of
   the "StreamReader" and "StreamWriter" interface respectively.

   *encode* and *decode* are needed for the frontend translation,
   *Reader* and *Writer* for the backend translation.  The
   intermediate format used is determined by the two sets of codecs,
   e.g. the Unicode codecs will use Unicode as the intermediate
   encoding.

   エラー処理はストリーム・リーダやライタで定義されている方法と同じよ
   うに行われます。

"StreamRecoder" インスタンスは、 "StreamReader" と "StreamWriter" クラ
スを合わせたインタフェースを定義します。また、元のストリームのメソッド
と属性も継承します。


エンコーディングと Unicode
==========================

Unicode strings are stored internally as sequences of code points (to
be precise as "Py_UNICODE" arrays). Depending on the way Python is
compiled (either via "--enable-unicode=ucs2" or "--enable-
unicode=ucs4", with the former being the default) "Py_UNICODE" is
either a 16-bit or 32-bit data type. Once a Unicode object is used
outside of CPU and memory, CPU endianness and how these arrays are
stored as bytes become an issue.  Transforming a unicode object into a
sequence of bytes is called encoding and recreating the unicode object
from the sequence of bytes is known as decoding.  There are many
different methods for how this transformation can be done (these
methods are also called encodings). The simplest method is to map the
code points 0–255 to the bytes "0x0"–"0xff". This means that a unicode
object that contains code points above "U+00FF" can’t be encoded with
this method (which is called "'latin-1'" or "'iso-8859-1'").
"unicode.encode()" will raise a "UnicodeEncodeError" that looks like
this: "UnicodeEncodeError: 'latin-1' codec can't encode character
u'\u1234' in position 3: ordinal not in range(256)".

There’s another group of encodings (the so called charmap encodings)
that choose a different subset of all unicode code points and how
these code points are mapped to the bytes "0x0"–"0xff". To see how
this is done simply open e.g. "encodings/cp1252.py" (which is an
encoding that is used primarily on Windows). There’s a string constant
with 256 characters that shows you which character is mapped to which
byte value.

All of these encodings can only encode 256 of the 1114112 code points
defined in unicode. A simple and straightforward way that can store
each Unicode code point, is to store each code point as four
consecutive bytes. There are two possibilities: store the bytes in big
endian or in little endian order. These two encodings are called
"UTF-32-BE" and "UTF-32-LE" respectively. Their disadvantage is that
if e.g. you use "UTF-32-BE" on a little endian machine you will always
have to swap bytes on encoding and decoding. "UTF-32" avoids this
problem: bytes will always be in natural endianness. When these bytes
are read by a CPU with a different endianness, then bytes have to be
swapped though. To be able to detect the endianness of a "UTF-16" or
"UTF-32" byte sequence, there’s the so called BOM (「Byte Order Mark」
). This is the Unicode character "U+FEFF". This character can be
prepended to every "UTF-16" or "UTF-32" byte sequence. The byte
swapped version of this character ("0xFFFE") is an illegal character
that may not appear in a Unicode text. So when the first character in
an "UTF-16" or "UTF-32" byte sequence appears to be a "U+FFFE" the
bytes have to be swapped on decoding. Unfortunately the character
"U+FEFF" had a second purpose as a "ZERO WIDTH NO-BREAK SPACE": a
character that has no width and doesn’t allow a word to be split. It
can e.g. be used to give hints to a ligature algorithm. With Unicode
4.0 using "U+FEFF" as a "ZERO WIDTH NO-BREAK SPACE" has been
deprecated (with "U+2060" ("WORD JOINER") assuming this role).
Nevertheless Unicode software still must be able to handle "U+FEFF" in
both roles: as a BOM it’s a device to determine the storage layout of
the encoded bytes, and vanishes once the byte sequence has been
decoded into a Unicode string; as a "ZERO WIDTH NO-BREAK SPACE" it’s a
normal character that will be decoded like any other.

さらにもう一つ Unicode 文字全てをエンコードできるエンコーディングがあ
り、UTF-8 と呼ばれています。UTF-8 は8ビットエンコーディングで、したが
って UTF-8 にはバイト順の問題はありません。UTF-8 バイト列の各バイトは
二つのパートから成ります。二つはマーカ(上位数ビット)とペイロードです。
マーカは0ビットから4ビットの "1" の列に "0" のビットが一つ続いたもので
す。Unicode 文字は次のようにエンコードされます (x はペイロードを表わし
、連結されると一つの Unicode 文字を表わします):

+-------------------------------------+------------------------------------------------+
| 範囲                                | エンコーディング                               |
+=====================================+================================================+
| "U-00000000" … "U-0000007F"         | 0xxxxxxx                                       |
+-------------------------------------+------------------------------------------------+
| "U-00000080" … "U-000007FF"         | 110xxxxx 10xxxxxx                              |
+-------------------------------------+------------------------------------------------+
| "U-00000800" … "U-0000FFFF"         | 1110xxxx 10xxxxxx 10xxxxxx                     |
+-------------------------------------+------------------------------------------------+
| "U-00010000" … "U-0010FFFF"         | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx            |
+-------------------------------------+------------------------------------------------+

Unicode 文字の最下位ビットとは最も右にある x のビットです。

As UTF-8 is an 8-bit encoding no BOM is required and any "U+FEFF"
character in the decoded Unicode string (even if it’s the first
character) is treated as a "ZERO WIDTH NO-BREAK SPACE".

Without external information it’s impossible to reliably determine
which encoding was used for encoding a Unicode string. Each charmap
encoding can decode any random byte sequence. However that’s not
possible with UTF-8, as UTF-8 byte sequences have a structure that
doesn’t allow arbitrary byte sequences. To increase the reliability
with which a UTF-8 encoding can be detected, Microsoft invented a
variant of UTF-8 (that Python 2.5 calls ""utf-8-sig"") for its Notepad
program: Before any of the Unicode characters is written to the file,
a UTF-8 encoded BOM (which looks like this as a byte sequence: "0xef",
"0xbb", "0xbf") is written. As it’s rather improbable that any charmap
encoded file starts with these byte values (which would e.g. map to

      LATIN SMALL LETTER I WITH DIAERESIS
      RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      INVERTED QUESTION MARK

のようになる)ので、"utf-8-sig" エンコーディングがバイト列から正しく推
測される確率を高めます。つまりここでは BOM はバイト列を生成する際のバ
イト順を決定できるように使われているのではなく、エンコーディングを推測
する助けになる印として使われているのです。"utf-8-sig" codec はエンコー
ディングの際ファイルに最初の3文字として "0xef", "0xbb", "0xbf" を書き
込みます。デコーディングの際はファイルの先頭に現れたこれら3バイトはス
キップします。UTF-8 では BOM の使用は推奨されておらず、一般的には避け
るべきです。


標準エンコーディング
====================

Python には数多くの codec が組み込みで付属します。これらは C 言語の関
数、対応付けを行うテーブルの両方で提供されています。以下のテーブルでは
codec と、いくつかの良く知られている別名と、エンコーディングが使われる
言語を列挙します。別名のリスト、言語のリストともしらみつぶしに網羅され
ているわけではありません。大文字と小文字、またはアンダースコアの代りに
ハイフンにしただけの綴りも有効な別名です; そのため、例えば "'utf-8'"
は "'utf_8'" codec の正当な別名です。

多くの文字セットは同じ言語をサポートしています。これらの文字セットは個
々の文字 (例えば、EURO SIGN がサポートされているかどうか) や、文字のコ
ード部分への割り付けが異なります。特に欧州言語では、典型的に以下の変種
が存在します:

* ISO 8859 コードセット

* Microsoft Windows コードページで、8859 コード形式から導出されてい
  る が、制御文字を追加のグラフィック文字と置き換えたもの

* IBM EBCDIC コードページ

* ASCII 互換の IBM PC コードページ

+-------------------+----------------------------------+----------------------------------+
| Codec             | 別名                             | 言語                             |
+===================+==================================+==================================+
| ascii             | 646, us-ascii                    | 英語                             |
+-------------------+----------------------------------+----------------------------------+
| big5              | big5-tw, csbig5                  | 繁体字中国語                     |
+-------------------+----------------------------------+----------------------------------+
| big5hkscs         | big5-hkscs, hkscs                | 繁体字中国語                     |
+-------------------+----------------------------------+----------------------------------+
| cp037             | IBM037, IBM039                   | 英語                             |
+-------------------+----------------------------------+----------------------------------+
| cp424             | EBCDIC-CP-HE, IBM424             | ヘブライ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp437             | 437, IBM437                      | 英語                             |
+-------------------+----------------------------------+----------------------------------+
| cp500             | EBCDIC-CP-BE, EBCDIC-CP-CH,      | 西ヨーロッパ言語                 |
|                   | IBM500                           |                                  |
+-------------------+----------------------------------+----------------------------------+
| cp720             |                                  | アラビア語                       |
+-------------------+----------------------------------+----------------------------------+
| cp737             |                                  | ギリシャ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp775             | IBM775                           | バルト沿岸国                     |
+-------------------+----------------------------------+----------------------------------+
| cp850             | 850, IBM850                      | 西ヨーロッパ言語                 |
+-------------------+----------------------------------+----------------------------------+
| cp852             | 852, IBM852                      | 中央および東ヨーロッパ           |
+-------------------+----------------------------------+----------------------------------+
| cp855             | 855, IBM855                      | ブルガリア、ベラルーシ、マケドニ |
|                   |                                  | ア、ロシア、セルビア             |
+-------------------+----------------------------------+----------------------------------+
| cp856             |                                  | ヘブライ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp857             | 857, IBM857                      | トルコ語                         |
+-------------------+----------------------------------+----------------------------------+
| cp858             | 858, IBM858                      | 西ヨーロッパ言語                 |
+-------------------+----------------------------------+----------------------------------+
| cp860             | 860, IBM860                      | ポルトガル語                     |
+-------------------+----------------------------------+----------------------------------+
| cp861             | 861, CP-IS, IBM861               | アイスランド語                   |
+-------------------+----------------------------------+----------------------------------+
| cp862             | 862, IBM862                      | ヘブライ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp863             | 863, IBM863                      | カナダ                           |
+-------------------+----------------------------------+----------------------------------+
| cp864             | IBM864                           | アラビア語                       |
+-------------------+----------------------------------+----------------------------------+
| cp865             | 865, IBM865                      | デンマーク、ノルウェー           |
+-------------------+----------------------------------+----------------------------------+
| cp866             | 866, IBM866                      | ロシア語                         |
+-------------------+----------------------------------+----------------------------------+
| cp869             | 869, CP-GR, IBM869               | ギリシャ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp874             |                                  | タイ語                           |
+-------------------+----------------------------------+----------------------------------+
| cp875             |                                  | ギリシャ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp932             | 932, ms932, mskanji, ms-kanji    | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| cp949             | 949, ms949, uhc                  | 韓国語                           |
+-------------------+----------------------------------+----------------------------------+
| cp950             | 950, ms950                       | 繁体字中国語                     |
+-------------------+----------------------------------+----------------------------------+
| cp1006            |                                  | Urdu                             |
+-------------------+----------------------------------+----------------------------------+
| cp1026            | ibm1026                          | トルコ語                         |
+-------------------+----------------------------------+----------------------------------+
| cp1140            | ibm1140                          | 西ヨーロッパ言語                 |
+-------------------+----------------------------------+----------------------------------+
| cp1250            | windows-1250                     | 中央および東ヨーロッパ           |
+-------------------+----------------------------------+----------------------------------+
| cp1251            | windows-1251                     | ブルガリア、ベラルーシ、マケドニ |
|                   |                                  | ア、ロシア、セルビア             |
+-------------------+----------------------------------+----------------------------------+
| cp1252            | windows-1252                     | 西ヨーロッパ言語                 |
+-------------------+----------------------------------+----------------------------------+
| cp1253            | windows-1253                     | ギリシャ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp1254            | windows-1254                     | トルコ語                         |
+-------------------+----------------------------------+----------------------------------+
| cp1255            | windows-1255                     | ヘブライ語                       |
+-------------------+----------------------------------+----------------------------------+
| cp1256            | windows-1256                     | アラビア語                       |
+-------------------+----------------------------------+----------------------------------+
| cp1257            | windows-1257                     | バルト沿岸国                     |
+-------------------+----------------------------------+----------------------------------+
| cp1258            | windows-1258                     | ベトナム                         |
+-------------------+----------------------------------+----------------------------------+
| euc_jp            | eucjp, ujis, u-jis               | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| euc_jis_2004      | jisx0213, eucjis2004             | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| euc_jisx0213      | eucjisx0213                      | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| euc_kr            | euckr, korean, ksc5601,          | 韓国語                           |
|                   | ks_c-5601, ks_c-5601-1987,       |                                  |
|                   | ksx1001, ks_x-1001               |                                  |
+-------------------+----------------------------------+----------------------------------+
| gb2312            | chinese, csiso58gb231280, euc-   | 簡体字中国語                     |
|                   | cn, euccn, eucgb2312-cn,         |                                  |
|                   | gb2312-1980, gb2312-80, iso-     |                                  |
|                   | ir-58                            |                                  |
+-------------------+----------------------------------+----------------------------------+
| gbk               | 936, cp936, ms936                | Unified Chinese                  |
+-------------------+----------------------------------+----------------------------------+
| gb18030           | gb18030-2000                     | Unified Chinese                  |
+-------------------+----------------------------------+----------------------------------+
| hz                | hzgb, hz-gb, hz-gb-2312          | 簡体字中国語                     |
+-------------------+----------------------------------+----------------------------------+
| iso2022_jp        | csiso2022jp, iso2022jp,          | 日本語                           |
|                   | iso-2022-jp                      |                                  |
+-------------------+----------------------------------+----------------------------------+
| iso2022_jp_1      | iso2022jp-1, iso-2022-jp-1       | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| iso2022_jp_2      | iso2022jp-2, iso-2022-jp-2       | 日本語, 韓国語, 簡体字中国語, 西 |
|                   |                                  | 欧, ギリシャ語                   |
+-------------------+----------------------------------+----------------------------------+
| iso2022_jp_2004   | iso2022jp-2004, iso-2022-jp-2004 | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| iso2022_jp_3      | iso2022jp-3, iso-2022-jp-3       | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| iso2022_jp_ext    | iso2022jp-ext, iso-2022-jp-ext   | 日本語                           |
+-------------------+----------------------------------+----------------------------------+
| iso2022_kr        | csiso2022kr, iso2022kr,          | 韓国語                           |
|                   | iso-2022-kr                      |                                  |
+-------------------+----------------------------------+----------------------------------+
| latin_1           | iso-8859-1, iso8859-1, 8859,     | 西ヨーロッパ                     |
|                   | cp819, latin, latin1, L1         |                                  |
+-------------------+----------------------------------+----------------------------------+
| iso8859_2         | iso-8859-2, latin2, L2           | 中央および東ヨーロッパ           |
+-------------------+----------------------------------+----------------------------------+
| iso8859_3         | iso-8859-3, latin3, L3           | エスペラント、マルタ             |
+-------------------+----------------------------------+----------------------------------+
| iso8859_4         | iso-8859-4, latin4, L4           | バルト沿岸国                     |
+-------------------+----------------------------------+----------------------------------+
| iso8859_5         | iso-8859-5, cyrillic             | ブルガリア、ベラルーシ、マケドニ |
|                   |                                  | ア、ロシア、セルビア             |
+-------------------+----------------------------------+----------------------------------+
| iso8859_6         | iso-8859-6, arabic               | アラビア語                       |
+-------------------+----------------------------------+----------------------------------+
| iso8859_7         | iso-8859-7, greek, greek8        | ギリシャ語                       |
+-------------------+----------------------------------+----------------------------------+
| iso8859_8         | iso-8859-8, hebrew               | ヘブライ語                       |
+-------------------+----------------------------------+----------------------------------+
| iso8859_9         | iso-8859-9, latin5, L5           | トルコ語                         |
+-------------------+----------------------------------+----------------------------------+
| iso8859_10        | iso-8859-10, latin6, L6          | 北欧語                           |
+-------------------+----------------------------------+----------------------------------+
| iso8859_11        | iso-8859-11, thai                | タイ語                           |
+-------------------+----------------------------------+----------------------------------+
| iso8859_13        | iso-8859-13, latin7, L7          | バルト沿岸国                     |
+-------------------+----------------------------------+----------------------------------+
| iso8859_14        | iso-8859-14, latin8, L8          | ケルト語                         |
+-------------------+----------------------------------+----------------------------------+
| iso8859_15        | iso-8859-15, latin9, L9          | 西ヨーロッパ言語                 |
+-------------------+----------------------------------+----------------------------------+
| iso8859_16        | iso-8859-16, latin10, L10        | 南東ヨーロッパ                   |
+-------------------+----------------------------------+----------------------------------+
| johab             | cp1361, ms1361                   | 韓国語                           |
+-------------------+----------------------------------+----------------------------------+
| koi8_r            |                                  | ロシア語                         |
+-------------------+----------------------------------+----------------------------------+
| koi8_u            |                                  | ウクライナ語                     |
+-------------------+----------------------------------+----------------------------------+
| mac_cyrillic      | maccyrillic                      | ブルガリア、ベラルーシ、マケドニ |
|                   |                                  | ア、ロシア、セルビア             |
+-------------------+----------------------------------+----------------------------------+
| mac_greek         | macgreek                         | ギリシャ語                       |
+-------------------+----------------------------------+----------------------------------+
| mac_iceland       | maciceland                       | アイスランド語                   |
+-------------------+----------------------------------+----------------------------------+
| mac_latin2        | maclatin2, maccentraleurope      | 中央および東ヨーロッパ           |
+-------------------+----------------------------------+----------------------------------+
| mac_roman         | macroman                         | 西ヨーロッパ言語                 |
+-------------------+----------------------------------+----------------------------------+
| mac_turkish       | macturkish                       | トルコ語                         |
+-------------------+----------------------------------+----------------------------------+
| ptcp154           | csptcp154, pt154, cp154,         | カザフ                           |
|                   | cyrillic-asian                   |                                  |
+-------------------+----------------------------------+----------------------------------+
| shift_jis         | csshiftjis, shiftjis, sjis,      | 日本語                           |
|                   | s_jis                            |                                  |
+-------------------+----------------------------------+----------------------------------+
| shift_jis_2004    | shiftjis2004, sjis_2004,         | 日本語                           |
|                   | sjis2004                         |                                  |
+-------------------+----------------------------------+----------------------------------+
| shift_jisx0213    | shiftjisx0213, sjisx0213,        | 日本語                           |
|                   | s_jisx0213                       |                                  |
+-------------------+----------------------------------+----------------------------------+
| utf_32            | U32, utf32                       | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+
| utf_32_be         | UTF-32BE                         | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+
| utf_32_le         | UTF-32LE                         | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+
| utf_16            | U16, utf16                       | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+
| utf_16_be         | UTF-16BE                         | all languages (BMP only)         |
+-------------------+----------------------------------+----------------------------------+
| utf_16_le         | UTF-16LE                         | all languages (BMP only)         |
+-------------------+----------------------------------+----------------------------------+
| utf_7             | U7, unicode-1-1-utf-7            | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+
| utf_8             | U8, UTF, utf8                    | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+
| utf_8_sig         |                                  | 全ての言語                       |
+-------------------+----------------------------------+----------------------------------+


Python 特有のエンコーディング
=============================

予め定義された codec のいくつかは Python 特有のものなので、それらの
codec 名は Python の外では無意味なものとなります。以下に、想定されてい
る入出力のタイプに基づいて、それらを表にしました（テキストエンコーディ
ングは codec の最も一般的な使用例ですが、その根底にある codec 基盤は、
ただのテキストエンコーディングというよりも、任意のデータの変換をサポー
トしていることに注意してください）。非対称的な codec については、その
目的がエンコーディングの方向を説明しています。

The following codecs provide unicode-to-str encoding [1] and str-to-
unicode decoding [2], similar to the Unicode text encodings.

+----------------------+-----------------------------+-----------------------------+
| Codec                | 別名                        | 目的                        |
+======================+=============================+=============================+
| idna                 |                             | Implements **RFC 3490**,    |
|                      |                             | see also "encodings.idna"   |
+----------------------+-----------------------------+-----------------------------+
| mbcs                 | dbcs                        | Windows のみ: 被演算子を    |
|                      |                             | ANSI コードページ (CP_ACP)  |
|                      |                             | に従ってエンコード します   |
+----------------------+-----------------------------+-----------------------------+
| palmos               |                             | PalmOS 3.5 のエンコーディン |
|                      |                             | グです                      |
+----------------------+-----------------------------+-----------------------------+
| punycode             |                             | Implements **RFC 3492**     |
+----------------------+-----------------------------+-----------------------------+
| raw_unicode_escape   |                             | Produce a string that is    |
|                      |                             | suitable as raw Unicode     |
|                      |                             | literal in Python source    |
|                      |                             | code                        |
+----------------------+-----------------------------+-----------------------------+
| rot_13               | rot13                       | 被演算子のシーザー暗号      |
|                      |                             | (Caesar-cypher) を返します  |
+----------------------+-----------------------------+-----------------------------+
| undefined            |                             | Raise an exception for all  |
|                      |                             | conversions. Can be used as |
|                      |                             | the system encoding if no   |
|                      |                             | automatic *coercion*        |
|                      |                             | between byte and Unicode    |
|                      |                             | strings is desired.         |
+----------------------+-----------------------------+-----------------------------+
| unicode_escape       |                             | Produce a string that is    |
|                      |                             | suitable as Unicode literal |
|                      |                             | in Python source code       |
+----------------------+-----------------------------+-----------------------------+
| unicode_internal     |                             | Return the internal         |
|                      |                             | representation of the       |
|                      |                             | operand                     |
+----------------------+-----------------------------+-----------------------------+

バージョン 2.3 で追加: The "idna" and "punycode" encodings.

The following codecs provide str-to-str encoding and decoding [2].

+----------------------+-----------------------------+-----------------------------+--------------------------------+
| Codec                | 別名                        | 目的                        | Encoder/decoder                |
+======================+=============================+=============================+================================+
| base64_codec         | base64, base-64             | 被演算子をマルチラインの    | "base64.encodestring()",       |
|                      |                             | MIME base64 に変換します (  | "base64.decodestring()"        |
|                      |                             | 結果は常に末尾の "'\n'" を  |                                |
|                      |                             | 含みます)                   |                                |
+----------------------+-----------------------------+-----------------------------+--------------------------------+
| bz2_codec            | bz2                         | 被演算子をbz2を使って圧縮し | "bz2.compress()",              |
|                      |                             | ます                        | "bz2.decompress()"             |
+----------------------+-----------------------------+-----------------------------+--------------------------------+
| hex_codec            | hex                         | 被演算子をバイトあたり 2 桁 | "binascii.b2a_hex()",          |
|                      |                             | の 16 進数の表現に変換しま  | "binascii.a2b_hex()"           |
|                      |                             | す                          |                                |
+----------------------+-----------------------------+-----------------------------+--------------------------------+
| quopri_codec         | quopri, quoted-printable,   | 被演算子を MIME quoted      | "quopri.encode()" with         |
|                      | quotedprintable             | printable 形式に変換します  | "quotetabs=True",              |
|                      |                             |                             | "quopri.decode()"              |
+----------------------+-----------------------------+-----------------------------+--------------------------------+
| string_escape        |                             | Produce a string that is    |                                |
|                      |                             | suitable as string literal  |                                |
|                      |                             | in Python source code       |                                |
+----------------------+-----------------------------+-----------------------------+--------------------------------+
| uu_codec             | uu                          | 被演算子を uuencode を用い  | "uu.encode()", "uu.decode()"   |
|                      |                             | て変換します                |                                |
+----------------------+-----------------------------+-----------------------------+--------------------------------+
| zlib_codec           | zip, zlib                   | 被演算子を gzip を用いて圧  | "zlib.compress()",             |
|                      |                             | 縮します                    | "zlib.decompress()"            |
+----------------------+-----------------------------+-----------------------------+--------------------------------+

[1] str objects are also accepted as input in place of unicode
    objects.  They are implicitly converted to unicode by decoding
    them using the default encoding.  If this conversion fails, it may
    lead to encoding operations raising "UnicodeDecodeError".

[2] unicode objects are also accepted as input in place of str
    objects.  They are implicitly converted to str by encoding them
    using the default encoding.  If this conversion fails, it may lead
    to decoding operations raising "UnicodeEncodeError".


"encodings.idna" — アプリケーションにおける国際化ドメイン名 (IDNA)
==================================================================

バージョン 2.3 で追加.

このモジュールでは **RFC 3490** (アプリケーションにおける国際化ドメイ
ン名、 IDNA: Internationalized Domain Names in Applications) および
**RFC 3492** (Nameprep: 国際化ドメイン名 (IDN) のための stringprep プ
ロファイル) を実装しています。このモジュールは "punycode" エンコーディ
ングおよび "stringprep" の上に構築されています。

これらの RFC はともに、非 ASCII 文字の入ったドメイン名をサポートするた
めのプロトコルを定義しています。 ("www.Alliancefrançaise.nu" のような)
非 ASCII 文字を含むドメイン名は、 ASCII と互換性のあるエンコーディング
(ACE、 "www.xn--alliancefranaise-npb.nu" のような形式) に変換されます
。ドメイン名の ACE 形式は、 DNS クエリ、 HTTP *Host* フィールドなどと
いった、プロトコル中で任意の文字を使えないような全ての局面で用いられま
す。この変換はアプリケーション内で行われます; 可能ならユーザからは不可
視となります: アプリケーションは Unicode ドメインラベルをネットワーク
に載せる際に IDNA に、 ACE ドメインラベルをユーザに提供する前に
Unicode に、それぞれ透過的に変換しなければなりません。

Python supports this conversion in several ways:  the "idna" codec
performs conversion between Unicode and ACE, separating an input
string into labels based on the separator characters defined in
section 3.1 (1) of **RFC 3490** and converting each label to ACE as
required, and conversely separating an input byte string into labels
based on the "." separator and converting any ACE labels found into
unicode.  Furthermore, the "socket" module transparently converts
Unicode host names to ACE, so that applications need not be concerned
about converting host names themselves when they pass them to the
socket module. On top of that, modules that have host names as
function parameters, such as "httplib" and "ftplib", accept Unicode
host names ("httplib" then also transparently sends an IDNA hostname
in the *Host* field if it sends that field at all).

(逆引きなどによって) ネットワーク越しにホスト名を受信する際、Unicode
への自動変換は行われません: こうしたホスト名をユーザに提供したいアプリ
ケーションでは、Unicode にデコードしてやる必要があります。

"encodings.idna" ではまた、 nameprep 手続きを実装しています。 nameprep
はホスト名に対してある正規化を行って、国際化ドメイン名で大小文字を区別
しないようにするとともに、類似の文字を一元化します。 nameprep 関数は必
要なら直接使うこともできます。

encodings.idna.nameprep(label)

   *label* を nameprep したバージョンを返します。現在の実装ではクエリ
   文字列を仮定しているので、"AllowUnassigned" は真です。

encodings.idna.ToASCII(label)

   **RFC 3490** 仕様に従ってラベルを ASCIIに変換します。
   "UseSTD3ASCIIRules" は偽であると仮定します。

encodings.idna.ToUnicode(label)

   **RFC 3490** 仕様に従ってラベルを Unicode に変換します。


"encodings.utf_8_sig" — BOM 印付き UTF-8
========================================

バージョン 2.5 で追加.

このモジュールは UTF-8 codec の変種を実装します。エンコーディング時は
、UTF-8 でエンコードしたバイト列の前に UTF-8 でエンコードした BOM を追
加します。これは内部状態を持つエンコーダで、この動作は (バイトストリー
ムの最初の書き込み時に) 一度だけ行なわれます。デコーディング時は、デー
タの最初に UTF-8 でエンコードされた BOM があれば、それをスキップします
。
