このページの本文へ

前へ 1 2 次へ

電子メールプロトコル再入門 第3回

メールで日本語を使うための仕組みを知ろう

メール誕生からある「7ビットの制約」を越えるMIMEとは?

2011年02月17日 06時00分更新

文● 遠藤哲

  • この記事をはてなブックマークに追加
  • 本文印刷

バイナリデータをUS-ASCIIにBASE64

 BASE64符号化は、3個の1バイト(8ビット)の集合をUS-ASCIIで表示可能な文字4文字に変換する。バイナリデータを、電子メールで転送するのに適した形式にする仕組みだ。

図5●BASE64エンコーディング

 図5に示すように、変換の対象となるデータを3バイト単位(8ビット×3=24ビット)で取り出し、6ビットずつ4つのパートに分ける。次に、分けたそれぞれのパートの6ビットの値を、表2に示すBASE64符号化の値と文字の対応表を参照しながら表示可能な文字に変換し、4文字のUS-ASCIIにする。

 これはデータのバイト列全体が符号化されるまで繰り返され、符号化データが作られる。また符号化されたデータは、1行が76文字以下となるように「CRLF(復帰改行)」が挿入される。

表2●BASE64:6ビットの値と対応文字

 なお、元のバイト列の最後に2バイトまたは1バイトの半端が残った場合、ちょうど3バイトとなるように値0のバイトが「パディング(padding、詰め物/埋め草)」される

 データを3バイトのまとまりにしたら、これをさらに6ビットずつ4つのパートに分ける。この際、パディングしたバイトから切り出された6ビットは値が0となる。この0をそのまま用いると、表2にあるとおり「0」は「A」に変換されるため、有効なデータと区別がつかなくなってしまう。そこで、パディングしたバイトから切り出された6ビットはパディング文字「=」に置き換えられる。

 このように、BASE64符号化を使うと元のデータバイトよりサイズが大きくなる。しかし、すべてUS-ASCII文字に置き換えられるので、7ビット環境でも問題なく転送が可能になるわけだ。

 ●

 次回は、MIME編の最後として、添付ファイルを実現する「マルチマート」などの仕組みを見ていこう。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事