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の文字の前に「+」後ろに「-」を置く。
 「+」の文字自体は「+-」で表現する。

 例 
 「」は「」とそのまま表記できる。
 「」は「」になる（「+」は「+-」になる）。
 「」は「」になる。ポンド記号はU+00A3はBase64で表記する。あまった2ビットは0で埋められる。
  Hex digit
  0
  0
  A
  3

   Bit pattern 000000001010001100
   Index
  0
  10
  12
   Base64-Encoded
  A
  K
  M


 変換方法 
 エンコード 
「£†」（U+00A3 U+2020）の場合 
£ ≡ 0x00A30000 0000 1010 0011UTF-16BEによる文字コードのビット表記†≡ 0x20200010 0000 0010 0000£†0000000010100011 0010000000100000文字列「£†」のビット表記(順に連結)0000000010100011 0010000000100000000000 001010 001100 100000 001000 00上位から6ビット毎の区切りで分割000000 001010 001100 100000 001000 00000000 001010 001100 100000 001000 000000最下位も6ビットになる様に0で埋める000000 001010 001100 100000 001000 000000AKMgIAbase64の変換表に従いエンコード

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

 修正UTF-7 
修正UTF-7（Modified UTF-7）はIMAP4で多言語のフォルダ名（ディレクトリ名）を使用するために用いられる規格である。
 「&」以外の印字可能なUS-ASCII文字は必ずそのまま表記する。
 それ以外の文字はUTF-16のビッグエンディアンで符号化し、修正BASE64で符号化する。
 BASE64の文字の前に「&」後ろに「-」を置く。
 「&」の文字自体は「&-」で表現する。

この規格は、メールの一般的な利用における、下記のような背景を考慮して導入された。, 5.1.3. メールボックスの国際的な命名規則 (日本語訳は http://www.lins.jp/~obata/imap/rfc/rfc2060ja.html#s5.1.3 より引用)
 UTF-7 は、シフトするために文字 "+" を用いる; これは、メールボックス名やUSENETニュースグループ名での "+" のありふれた使用と衝突する。 
 UTF-7 の符号化は、文字 "/" を用いる BASE64である; これは、一般的な階層区切りとしての "/" の使用と衝突する。
 UTF-7 は、符号化されない "\" の使用を禁じている; これは、一般的な階層区切りとしての "\" の使用と衝突する。 
 UTF-7 は、符号化されない "~" の使用を禁じている; これは、いくつかのサーバでホームディレクトリを示すものとしての "~" の使用と衝突する。 
 UTF-7 は、同じ文字列を表現するための、複数の別の形式を許している; 特に、印字可能な US-ASCII 文字が符号化形式で表現され得る。 
すなわち修正UTF-7では、電子メールやフォルダ名一般における頻出文字を修正BASE64変換せず、
概ね平文のまま読むことが可能になる。

 関連項目
文字コード

 出典 


  （修正UTF-7の規格）

 脚注 

Category:文字コード
Category:Unicode
Category:電子メールのプロトコル
1642