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]
- UTF-7 は、シフトするために文字 "+" を用いる; これは、メールボックス名やUSENETニュースグループ名での "+" のありふれた使用と衝突する。
- UTF-7 の符号化は、文字 "/" を用いる BASE64である; これは、一般的な階層区切りとしての "/" の使用と衝突する。
- UTF-7 は、符号化されない "\" の使用を禁じている; これは、一般的な階層区切りとしての "\" の使用と衝突する。
- UTF-7 は、符号化されない "~" の使用を禁じている; これは、いくつかのサーバでホームディレクトリを示すものとしての "~" の使用と衝突する。
- UTF-7 は、同じ文字列を表現するための、複数の別の形式を許している; 特に、印字可能な US-ASCII 文字が符号化形式で表現され得る。
すなわち修正UTF-7では、電子メールやフォルダ名一般における頻出文字を修正BASE64変換せず、
概ね平文のまま読むことが可能になる。
関連項目
出典
|
---|
日本語用の 文字コード |
|
---|
日本語を含む 多言語文字集合 |
|
---|
日本語以外用の 文字集合 |
|
---|
ソフトウェア | |
---|
区分け | |
---|
概念 | |
---|
関連トピック | |
---|
カテゴリ |
脚注
- ^ RFC 2060, 5.1.3. メールボックスの国際的な命名規則 (日本語訳は http://www.lins.jp/~obata/imap/rfc/rfc2060ja.html#s5.1.3 より引用)