UTF-7

unicodeを7ビットコードの範囲で表現するエンコード方式。基本的考え方としては、unicodeをビッグエンディアン表記したものををBASE64エンコードする。

エンコード方法

  1. 下記の文字(文字セットD)は、BASE64エンコードせず、8bitで出力する。
      0-9 A-Z a-z ' ( ) , - . / : ? 及び、スペース・タブ・CR・LF
  2. 下記の文字は(文字セットO)、BASE64エンコードしても、直接出力してもよい。
      ! " # $ % & * ; < = > @ [ ] ^ _ ' { | }
  3. 上記以外の文字で構成される文字列は、BASE64エンコードし、+ に続けてBASE64文字列を出力する。但し、BASE64文字列の文字数が4の倍数にならない場合に追加されるPAD文字には、ヌル文字(ゼロビット列)を使用する。
  4. BASE64を構成する文字は、下記の文字(文字セットB)である。
      A-Z a-z 0-9 + /
  5. BASE64文字列に続けて、文字セットB自身を出力する場合は、- を出力してから後続文字(文字セットB)を出力する。
  6. BASE64文字列に続けて、文字セットB以外を出力する場合は、そのまま後続文字を出力する。
  7. BASE64文字列に続けて、改行(CRまたはLF)を出力した場合、次の行にBASE64文字列を出力する前には、再度 + を出力する。
  8. 特例として、文字 + を単独でエンコードする場合は、+- を出力してもよい。

UTF-16で用いられているサロゲートペア領域(U+D800~U+DFFF)も上記に従ってエンコード可能である(つまり、unicodeをUTF-16BEでエンコードした後にUTF-7エンコードする)も認められている。

このエンコード方式は7ビットしか透過しないような環境(例えば、旧式の電子メール)での使用を前提としており、一般的に使用する事は推奨されない。

デコード方法

  1. + が現れるまで入力文字をそのまま出力する。
  2. + が現れたら、文字セットB以外が現れるまでBASE64デコードして出力する。
  3. 現れた非文字セットBが、- ならばその文字は削除する。