18.12. "base64" --- RFC 3548: Base16, Base32, Base64 データの符号化
*******************************************************************

このモジュールは、 **RFC 3548** で定められた仕様によるデータの符号化 (
エンコード、 encoding) および復元 (デコード、 decoding) を提供します。
この RFC 標準では Base16, Base32 および Base64 が定義されており、これ
はバイナリ文字列とテキスト文字列とをエンコードあるいはデコードするため
のアルゴリズムです。変換されたテキスト文字列は email で確実に送信した
り、 URL の一部として使用したり、 HTTP POST リクエストの一部に含めるこ
とができます。これらの符号化アルゴリズムは **uuencode** で使われている
ものとは別物です。

There are two interfaces provided by this module.  The modern
interface supports encoding and decoding string objects using both
base-64 alphabets defined in **RFC 3548** (normal, and URL- and
filesystem-safe).  The legacy interface provides for encoding and
decoding to and from file-like objects as well as strings, but only
using the Base64 standard alphabet.

Python 2.4 で導入された現代的なインターフェイスは以下のものを提供しま
す :

base64.b64encode(s[, altchars])

   Base64 をつかって、文字列をエンコードします。

   *s* はエンコードする文字列です。オプション引数 *altchars* は最低で
   も 2 の長さをもつ文字列で (これ以降の文字は無視されます)、これは
   "+" と "/" の代わりに使われる代替アルファベットを指定します。これに
   より、アプリケーションはたとえば URL やファイルシステムの影響をうけ
   ない Base64 文字列を生成することができます。デフォルトの値は "None"
   で、これは標準の Base64 アルファベット集合が使われることを意味しま
   す。

   エンコードされた文字列が返されます。

base64.b64decode(s[, altchars])

   Base64 文字列をデコード ( 復元 ) します。

   *s* にはデコードする文字列を渡します。オプション引数の *altchars*
   は最低でも 2 の長さをもつ文字列で ( これ以降の文字は無視されます )
   、これは "+" と "/" の代わりに使われる代替アルファベットを指定しま
   す。

   The decoded string is returned.  A "TypeError" is raised if *s* is
   incorrectly padded.  Characters that are neither in the normal
   base-64 alphabet nor the alternative alphabet are discarded prior
   to the padding check.

base64.standard_b64encode(s)

   標準の Base64 アルファベット集合をもちいて文字列 *s* をエンコード (
   符号化 ) します。

base64.standard_b64decode(s)

   標準の Base64 アルファベット集合をもちいて文字列 *s* をデコード (
   復元 ) します。

base64.urlsafe_b64encode(s)

   Encode string *s* using the URL- and filesystem-safe alphabet,
   which substitutes "-" instead of "+" and "_" instead of "/" in the
   standard Base64 alphabet.  The result can still contain "=".

base64.urlsafe_b64decode(s)

   Decode string *s* using the URL- and filesystem-safe alphabet,
   which substitutes "-" instead of "+" and "_" instead of "/" in the
   standard Base64 alphabet.

base64.b32encode(s)

   Base32 をつかって、文字列をエンコード ( 符号化 ) します。 *s* には
   エンコードする文字列を渡し、エンコードされた文字列が返されます。

base64.b32decode(s[, casefold[, map01]])

   Base32 をつかって、文字列をデコード ( 復元 ) します。

   *s* にはエンコードする文字列を渡します。オプション引数 *casefold*
   は小文字のアルファベットを受けつけるかどうかを指定します。セキュリ
   ティ上の理由により、デフォルトではこれは "False" になっています。

   **RFC 3548** は付加的なマッピングとして、数字の 0 (零) をアルファベ
   ットの O (オー) に、数字の 1 (壱) をアルファベットの I (アイ) また
   は L (エル) に対応させることを許しています。オプション引数は
   *map01* は、 "None" でないときは、数字の 1 をどの文字に対応づけるか
   を指定します (*map01* が "None" でないとき、数字の 0 はつねにアルフ
   ァベットの O (オー) に対応づけられます)。セキュリティ上の理由により
   、これはデフォルトでは "None" になっているため、 0 および 1 は入力
   として許可されていません。

   デコードされた文字列が返されます。 *s* が正しくパディングされていな
   かったり、規定のアルファベット以外の文字が含まれていた場合には
   "TypeError" が発生します。

base64.b16encode(s)

   Base16 をつかって、文字列をエンコード ( 符号化 ) します。

   *s* にはエンコードする文字列を渡し、エンコードされた文字列が返され
   ます。

base64.b16decode(s[, casefold])

   Base16 をつかって、文字列をデコード ( 復元 ) します。

   *s* にはエンコードする文字列を渡します。オプション引数 *casefold*
   は小文字のアルファベットを受けつけるかどうかを指定します。セキュリ
   ティ上の理由により、デフォルトではこれは "False" になっています。

   デコードされた文字列が返されます。 *s* が正しくパディングされていな
   かったり、規定のアルファベット以外の文字が含まれていた場合には
   "TypeError" が発生します。

レガシーなインターフェイスは以下のものを提供します:

base64.decode(input, output)

   *input* の中身をデコードした結果を *output* に出力します。 *input*
   、 *output* ともにファイルオブジェクトか、ファイルオブジェクトと同
   じインターフェースを持ったオブジェクトである必要があります。
   *input* は "input.read()" が空文字列を返すまで読まれます。

base64.decodestring(s)

   文字列 *s* をデコードして結果のバイナリデータを返します。 *s* には
   一行以上の base64 形式でエンコードされたデータが含まれている必要が
   あります。

base64.encode(input, output)

   *input* の中身を base64 形式でエンコードした結果を *output* に出力
   します。 *input* 、 *output* ともにファイルオブジェクトか、ファイル
   オブジェクトと同じインターフェースを持ったオブジェクトである必要が
   あります。 *input* は "input.read()" が空文字列を返すまで読まれます
   。 "encode()" はエンコードされたデータと改行文字 ("'\n'") を出力し
   ます。

base64.encodestring(s)

   文字列 *s* ( 任意のバイナリデータを含むことができます ) を r base64
   形式でエンコードした結果の (1 行以上の文字列 ) データを返します。
   "encodestring()" はエンコードされた一行以上のデータと改行文字
   ("'\n'") を出力します。

モジュールの使用例:

>>> import base64
>>> encoded = base64.b64encode('data to be encoded')
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'

参考:

  モジュール "binascii"
     ASCII からバイナリへ、バイナリから ASCII への変換をサポートするモ
     ジュール。

  **RFC 1521** - MIME (Multipurpose Internet Mail Extensions) Part
  One: Mechanisms for Specifying and Describing the Format of Internet
  Message Bodies
     Section 5.2, "Base64 Content-Transfer-Encoding," provides the
     definition of the base64 encoding.
