2000/11/22 [水]
UTF-7 への変換方法は次の通りです。ただし U を UCS または Unicode のコードポイントを表すことにします。また Bxx という表現は左にある U の xx ビット目の値をあらわしています。数字の中の _ は見やすくするために便宜上挿入した記号です。
変換方法
- 次の文字集合を定義します。
名称 定義される文字群 set_D ABC..XYZabc..xyz012..789'(),-./:? set_O !"#$%&*;<=>@[]^_`{|} set_B ABC..XYZabc..xyz012..789+/
- SPC (0x20), TAB (0x09), CR (0x0d), LF (0x0a) は、そのまま使用することが許されます。
- set_D に出現する文字はそのまま使用することが許されます。また同様に set_O の文字も許されますが、mail システムによっては支障が出ることがあります。
- それ以外の文字は、Unicode 文字列として set_B で示される文字を使って符号化します。符号化は UTF-16 で示される 16bit 単位の Unicode 文字列を基本として、base64 (RFC2045) エンコードをします。ただし、バイトが足りなくなったときに付加される '=' 記号は使用せずに、不足した場合は、ビット値 0を必要数補って符号化します。デコードされたときの最終文字が完全な Unicode をなしていないものは捨てます。もしそれが 0 でないなら、不正な形式ということになります。
符号化した場合、それを表すために先頭にシフト文字 '+' をつけます。この '+' の文字が (修正された) base64 エンコードの開始を示し、set_B 以外の文字 (例えば、CR LF などの制御文字も含む) が出現するまでが符号化されていることを示します。また明示的に終了を示すために、'-' 記号を使うことができます。この場合には '-' 記号は捨てられます。
特例として、'+-' は '+' 文字を表すことにします。'+' の後に、set_B または '-'以外の文字が続いた場合不正になります。
変換例
-
漢字 (0x226F 0x575B) →
00100010_01101111 01010111_01011011 →
001000 100110 111101 010111 010110 11 →
001000 100110 111101 010111 010110 110000 →
8 38 61 23 22 48 → 変換 →
I m 9 X W w →
"+Im9XWw-" (すなわちバイト列 2B496D395857772D)
by seclan