UTF-7

UTF-7(ユーティーエフなな、ユーティーエフセブン)はISO/IEC 10646(UCS)とUnicodeで使える7ビット符号単位の文字符号化形式及び文字符号化スキーム

7ビットでしか送信できない制限があるプロトコル上のメールやニュースなどの環境で、その体系上でUnicodeのメールを送信可能にするために作られた規格である。

現在では正しく実装されていないアプリケーション上でセキュリティー上の脆弱性を発生させることがあることから、あまり使われなくなっている。

IMAP4では、UTF-7を変更した規格である修正UTF-7の規格があり、この規格は2010年代現在においては頻繁に使用される。

機能

[編集]
  • 62個のアルファベットと9個の記号(' ( ) , - . / : ?)はそのまま表記する。
  • それ以外の文字はUTF-16ビッグエンディアンで符号化し、修正BASE64で符号化する。修正BASE64とは=を入れないBASE64エンコーディング形式である。
  • BASE64の文字の前に「+」後ろに「-」を置く。
  • 「+」の文字自体は「+-」で表現する。

[編集]
  • Hello, World!」は「Hello, World!」とそのまま表記できる。
  • 1 + 1 = 2」は「1 +- 1 = 2」になる(「+」は「+-」になる)。
  • £1」は「+AKM-1」になる。ポンド記号はU+00A3はBase64で表記する。あまった2ビットは0で埋められる。
Hex digit 0 0 A 3  
Bit pattern 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0
Index 0 10 12
Base64-Encoded A K M

変換方法

[編集]

エンコード

[編集]

「£†」(U+00A3 U+2020)の場合

£ ≡ 0x00A3 0000 0000 1010 0011 UTF-16BEによる文字コードのビット表記
†≡ 0x2020 0010 0000 0010 0000
£† 0000000010100011 0010000000100000 文字列「£†」のビット表記(順に連結)
0000000010100011 0010000000100000 000000 001010 001100 100000 001000 00 上位から6ビット毎の区切りで分割
000000 001010 001100 100000 001000 00 000000 001010 001100 100000 001000 000000 最下位も6ビットになる様に0で埋める
000000 001010 001100 100000 001000 000000 AKMgIA base64の変換表に従いエンコード

デコード

[編集]
AKMgIA 000000 001010 001100 100000 001000 000000 base64の変換表に従いデコード
000000 001010 001100 100000 001000 000000 0000000010100011 0010000000100000 0000 上位から16ビット毎の区切りで分割
0000000010100011 0010000000100000 0000 0000000010100011 0010000000100000 最下位の0が連続するビット列は削除
0000 0000 1010 0011 0x00A3 ≡ £ 16ビット毎にUTF-16BEの文字コードとして解釈
0010 0000 0010 0000 0x2020 ≡†
0000000010100011 0010000000100000 £† デコード結果

修正UTF-7

[編集]

修正UTF-7(Modified UTF-7)はIMAP4で多言語のフォルダ名(ディレクトリ名)を使用するために用いられる規格である。

  • 「&」以外の印字可能なUS-ASCII文字は必ずそのまま表記する。
  • それ以外の文字はUTF-16ビッグエンディアンで符号化し、修正BASE64で符号化する。
  • BASE64の文字の前に「&」後ろに「-」を置く。
  • 「&」の文字自体は「&-」で表現する。

この規格は、メールの一般的な利用における、下記のような背景を考慮して導入された。[1]

  1. UTF-7 は、シフトするために文字 "+" を用いる; これは、メールボックス名やUSENETニュースグループ名での "+" のありふれた使用と衝突する。
  2. UTF-7 の符号化は、文字 "/" を用いる BASE64である; これは、一般的な階層区切りとしての "/" の使用と衝突する。
  3. UTF-7 は、符号化されない "\" の使用を禁じている; これは、一般的な階層区切りとしての "\" の使用と衝突する。
  4. UTF-7 は、符号化されない "~" の使用を禁じている; これは、いくつかのサーバでホームディレクトリを示すものとしての "~" の使用と衝突する。
  5. UTF-7 は、同じ文字列を表現するための、複数の別の形式を許している; 特に、印字可能な US-ASCII 文字が符号化形式で表現され得る。

すなわち修正UTF-7では、電子メールやフォルダ名一般における頻出文字を修正BASE64変換せず、 概ね平文のまま読むことが可能になる。

関連項目

[編集]

出典

[編集]
  • RFC 1642
  • RFC 2152
  • RFC 2060(修正UTF-7の規格)

脚注

[編集]
  1. ^ RFC 2060, 5.1.3. メールボックスの国際的な命名規則 (日本語訳は http://www.lins.jp/~obata/imap/rfc/rfc2060ja.html#s5.1.3 より引用)