<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <dfn>UTF-7</dfn> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UCS</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10646</anchor>/<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor>)
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化方式</anchor>の一つで、 <code class="char">U+0080</code>〜<code class="char">U+10FFFF</code> を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">図形文字</anchor>に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor> を使って転写するものです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Experimental</anchor> RFC である <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 1642</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="urn:ietf:rfc:1642">urn:ietf:rfc:1642</anchor-external>
で定義されていましたが、この RFC は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2152</anchor>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="urn:ietf:rfc:2152">urn:ietf:rfc:2152</anchor-external> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Informational</anchor>)
で廃止されました。 RFC 2152 は editorial な変更以外は
RFC 1642 と同じ内容です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end>
UTF-7 は 7ビットの制限がある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子メイル</anchor> (特に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SMTP</anchor>)
での使用を想定して設計されたものですが、現在では使用は非推奨とされています。 
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor> で包むなりして送るのが <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> 
のお勧めらしいです。)</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMAP</anchor> では<dfn>修正 UTF-7</dfn> が使われています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-7</anchor> は任意の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode文字</anchor>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII文字</anchor>として表現するため、
利用可能な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>の検査を迂回して <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XSS</anchor> のような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">脆弱</anchor>な状況を作り出したり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">自動判別</anchor>に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-7</anchor> と誤認させて不正な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラム</anchor>を実行させたりすることが容易でした。
このため <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-7</anchor> を実装すること自体が深刻な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セキュリティー</anchor>の問題と認識されるようになり、
現在では使われなくなりました。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <cite xml:lang="en">RFC 1642 - UTF-7 - A Mail-Safe Transformation Format of Unicode</cite> (<time>2018-01-21 18:01:49 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc1642">https://tools.ietf.org/html/rfc1642</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <cite xml:lang="en">RFC 2152 - UTF-7 A Mail-Safe Transformation Format of Unicode</cite> (<time>2018-01-28 16:55:03 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc2152">https://tools.ietf.org/html/rfc2152</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <cite>RFC Errata Report » RFC Editor</cite> (<time>2018-02-04 00:02:43 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/errata_search.php?rfc=2152">https://www.rfc-editor.org/errata_search.php?rfc=2152</anchor-external></li></ul></refs></section><section><h1>符号化方式</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end><dl><dt>集合 D (直接符号化文字)</dt><dd><code class="regex"><strong>[</strong>A-Za-z0-9'(),-./:?<strong>]</strong></code></dd><dt>集合 O (任意符号化文字)</dt><dd><code class="regex"><strong>[</strong>!&quot;#$%&amp;*;&lt;=&gt;@[]^_`{|}<strong>]</strong></code></dd><dt>集合 B (修正 Base64)</dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor> 字母 (<code class="char">=</code> を除く。)</dd></dl></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end>
<dfn>規則1 (直接符号化)</dfn>: 集合 D と集合 O の文字は、そのまま
1 オクテットの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> で符号化。集合 O 
の文字は使用する頭欄や通過する関門によっては問題があり得るから注意。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end>
<dfn>規則2 (Unicode シフト符号化)</dfn>: 任意の Unicode 文字
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-16BE</anchor> で表したもの。) を<dfn>修正 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor></dfn>
で符号化。この前に <code class="char">+</code> を置く。これは集合 B に無い文字 
(<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CR</anchor></code> や <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LF</anchor></code> などを含む。) 
が出現するまで続く。<q>集合 B に無い文字</q>が 
<code class="char">-</code> の時は、これを棄てる。</p><p>規則2を別の言い方で説明すると、こう。任意の Unicode
文字(列)は修正 Base64 で符号化して、頭とお尻に <code class="char">+</code> と <code class="char">-</code>
をつける。但し、この塊の直後が集合 B に含まれない文字である場合は、
<code class="char">-</code> を省略しても良い。</p><p><code class="char">+-</code> は、 <code class="char">+</code> を表す。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end>
<dfn>規則3</dfn>: <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SP</anchor></code> (<code class="char">U+0020</code>), 
<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HT</anchor></code> (<code class="char">U+0009</code>), <code class="char">CR</code> (<code class="char">U+000D</code>), 
<code class="char">LF</code> (<code class="char">U+000A</code>)
は、そのまま1オクテットの ASCII で表現。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end>
RFC 2152 は集合 O の <code class="char">`</code> を <code class="char">'</code> に誤植しています。
(RFC 1642 はあってるのに。) 気になるなら両方とも集合 O
として扱うのが良いかもしれません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> これをみるとわかるように、 UTF-7 は他の UTF-8
などの符号化方式とは違って UCS 専用の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">転送符号化</anchor>のような趣です。
Charset の一種ではなく、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の一部であったなら、
もう少しは普及したかもしれません。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>UTF-7 の修正 Base64</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 基本的には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor> なのですが、
詰め物 <code class="char">=</code> は使わずに、 0 のビットがあるとして処理します。
(復号の時は余ったのを棄てるだけで良い。)</p><p>(だけど最後が <code class="char">U+0000</code> だと困るような。 <code class="char">U+0000</code> は 
<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NUL</anchor></code> だし、ステステなのかな。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">C</anchor> 以来 (それ以前から??) <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NULL</anchor></code> 
って冷遇されてますよねぇ。 (っていうか <code class="char">NULL</code> ってそういうもの?)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end>
MIME の改行に関する規定もないことになってるような。 UTF-7 RFC にそう明記されていたっけ?</p></section><section><h1>Korean mess と UTF-7</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> 
Charset 名 <code class="charset">UNICODE-1-1-UTF-7</code> は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode 1.1</anchor> 
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ハングルの大移動</anchor>以前) のデータを UTF-7 
で符号化したものに対して使います。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>修正 UTF-7</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end>
<dfn>IMAP <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">修正<rt xmlns="http://www.w3.org/1999/xhtml">modified</rt></rubyb> UTF-7</dfn> は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2060</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="urn:ietf:rfc:2060">urn:ietf:rfc:2060</anchor-external> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMAP</anchor>) 5.1.3 で定義されています。
(決まった呼び名はなく、<q>IMAP の UTF-7</q> とか呼びたい人が好きな名前で呼んでいます。)</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> <cite xml:lang="en">RFC 2060 - Internet Message Access Protocol - Version 4rev1</cite> (<time>2018-01-28 19:02:32 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc2060#section-5.1.3">https://tools.ietf.org/html/rfc2060#section-5.1.3</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <cite xml:lang="en">RFC 3501 - INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1</cite> (<time>2018-02-01 03:51:41 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc3501#section-5.1.3">https://tools.ietf.org/html/rfc3501#section-5.1.3</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> <cite>RFC Errata Report » RFC Editor</cite> (<time>2018-02-04 00:33:46 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/errata_search.php?rfc=3501">https://www.rfc-editor.org/errata_search.php?rfc=3501</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end>
<code class="char">&amp;</code> を除く印字可能 ASCII 文字 (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SP</anchor></code> を含む。) は全て、
そのままにします。
それ以外の文字 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">C0</anchor>, <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DEL</anchor></code> を含む。) は修正修正 Base64 
を使います。</p><p>修正修正 Base64 は、前に <code class="char">&amp;</code> が、後に <code class="char">-</code> が来ます。
(明記されてはいませんが、修正前の UTF-7 とは異なり、 
<code class="char">-</code> は省略不能だと思います。)
Base64 字母の <code class="char">/</code> は
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMAP 的意味との衝突防止から</weak> <code class="char">,</code> で代用します。</p><p><code class="char">&amp;-</code> が <code class="char">&amp;</code> を表します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> これだけ違うと別の名前付けた方がよかったと思うぞ。
<form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></p></section><section><h1>UTF-7 を採用した規格</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> UTF-7 を積極的に (単なる可能な選択肢の一つとしてではなく、
実装必須であろうが任意選択であろうが規格の完全な一部として)
採用している規格には次のようなものがあります。</p><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMAP</anchor><ul><li>IMAP は名前に UTF-7 を使っています。但し、素の UTF-7
ではなく、アルゴリズムが同じなだけで互換性のない修正版 UTF-7 です。</li></ul></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PICS</anchor> (<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">application/pics-service</anchor></code>)<ul><li>記述に UTF-7 を使っています。</li><li>区切子と使う二重引用符以外の集合 O の文字は直接符号化します。</li><li>仕様書: <cite>REC-PICS-services-961031</cite> 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/REC-PICS-services#Syntax">http://www.w3.org/TR/REC-PICS-services#Syntax</anchor-external></li></ul></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end>
sdfs
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2007-04-17 04:43:31 +00:00</weak>)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>MIME での使用</h1><section><h1>素の UTF-7</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> で使用する時は、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">charset</anchor></code> 名 
<code class="charset">UTF-7</code> または
<code class="charset">UNICODE-1-1-UTF-7</code> (RFC 1642) を使います。</p><p>IANA 登録簿に無い名前では、 <code class="charset">UTF7</code>, <code class="charset">CP65000</code>, 
<code class="charset">UNICODE-2-0-UTF-7</code>,
<code class="charset">UNICODE-2-0-UTF7</code>, <code class="charset">X-UNICODE-2-0-UTF-7</code> 
が観測されてます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SMTP</anchor> で使う時は、 <code class="char">LINE SEPARATOR</code> (<code class="char">U+2028</code>) tp
<code class="char">PARAGRAPH SEPARATOR</code> (<code class="char">U+2029</code>)
を <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CRLF</anchor></code> に変換してあげたら良さげ、って RFC 2152 に書いてあります。
でも実際 <code class="char">LS</code> とか <code class="char">PS</code> を使ってる文書ってあるんですかね?</p><p><q><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</anchor></q> じゃないし、無視していいと思います。 <code class="char">PS</code> を 
<code class="char">CRLF</code> に変換するのは明らかに情報劣化ですし。 
(plain‐text で <code class="char">PS</code> なんて使うなっていう
話もありますが。)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>修正 UTF-7</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end>
IMAP の修正 UTF-7 の名前としては、 <code class="charset">X-IMAP4-Modified-UTF7</code>,
<code class="charset">UTF-7-for-IMAP</code> が観測されてます。 
IANA 登録簿に登録しようという動きがありましたが、情報交換用でない charset 
を登録する必要は無いという意見があって、立ち消えになってしまいました。
(登録派の意見は、プログラムの内部名として使うときに IANA 
名が標準化されていたほうが便利、というもの。確かに根拠としては弱い。)</p><p>ちなみに、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PHP</anchor> では <code class="charset">UTF7-IMAP</code> という名前を使っています。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>内容転送符号化</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> で使用する場合、 <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Transfer-Encoding</anchor></code>
は不要です。 (<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">7bit</anchor></code> で十分です。)</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII</anchor> すら保証されない転送路 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(いまどきあるのか?)</weak>
を通す必要がある時は、適当な CTE を使うか、集合 O
の文字も UTF-7 で修正 Base64 を使って符号化すればよいでしょう。
(集合 D の文字が危険な場合は CTE を使うしかありません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関門</anchor>などで charset を勝手に変えたくない場合も CTE を使うしかありません。)</p><p>CTE を使う場合は <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor></code> ではなく、
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Quoted-Printable</anchor></code> を使うべきです。
<code class="MIME">Base64</code> を使うのは無駄過ぎです。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>符号化語</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME</anchor> <code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">encoded-word</anchor></code> で使用する場合、
<code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">B</anchor></code> 符号化ではなく <code class="MIME"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Q</anchor></code>
符号化を使うべきです。 (Base64 を使うのは無駄過ぎです。)
ほとんどの場合は <code class="MIME">Q</code> 符号化でも実質無変換で使用できます。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>その他</h1><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section></section><section><h1>CodePage</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Windows CodePage</anchor> 65000 が素の UTF-7 に割り当てられているようです。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>ファイル名</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 素の UTF-7 で書かれた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>であることを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">接尾辞</anchor>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">拡張子</anchor>) を使って示すことがたまにあります。</p><p>そのような場合に使われる接尾辞の例:<ul><li><samp class="file">.u7</samp></li><li><samp class="file">.utf7</samp></li><li><samp class="file">.utf-7</samp></li></ul></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>実装について</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 古い <abbr><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NN</anchor><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Netscape Navigator</anchor></title></abbr> は <code class="char">+-</code> 
に対応していないらしいです。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal> のように間違った実装では <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PLUS SIGN</anchor></code> をそのまま 
<code class="char">+</code> と表すみたいです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> もし <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal>-7 のような問題が気になるのなら、
<code class="char">+</code> は規則2で符号化することにすれば、(きっと) 問題ないでしょう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Outlook Express</anchor> (版不明) では、 UTF-7
で本文を符号化すると、 <code class="822"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Message-ID</anchor>:</code> 欄などでも意味もなく
UTF-7 で符号化してしまうらしいです。 (<code class="ABNF"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">encoded-word</anchor></code>
などではなく、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欄本体</anchor>が生の UTF-7。)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>例</h1><section><h1>素の UTF-7</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <samp>A+ImIDkQ.</samp> (= <samp>A<code class="char">&lt;NOT IDENTICAL TO&gt;</code>Α.</samp>) 
(<code class="char">U+0041</code> <code class="char">U+2262</code> <code class="char">U+0391</code> <code class="char">U+002E</code>)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <samp>Hi Mom -+Jjo--!</samp> (= <samp>Hi Mom -<code class="char">&lt;WHITE SMILING FACE&gt;</code>-!</samp>) 
(<code class="char">U+0048</code> <code class="char">U+0069</code> <code class="char">U+0020</code> 
<code class="char">U+004D</code> <code class="char">U+006F</code> <code class="char">U+006D</code> 
<code class="char">U+0020</code> <code class="char">U+002D</code> <code class="char">U+263A</code> 
<code class="char">U+002D</code> <code class="char">U+0021</code>)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <samp>+ZeVnLIqe-</samp> (= <samp>日本語</samp>) 
(<code class="char">U+65E5</code> <code class="char">U+672C</code> <code class="char">U+8A9E</code>)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <samp>Item 3 is +AKM-1.</samp> (= <samp>Item 3 is £1.</samp>)</li></ul><p>(RFC 2152 より。この例はもはや伝説になりつつあるな。。)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>修正 UTF-7</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <samp>~peter/mail/&amp;ZeVnLIqe-/&amp;U,BTFw-</samp></li></ul><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end>
<cite>スラッシュドット ジャパン | UTF-7エンコードされたタグ文字列によるXSS脆弱性に注意</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://slashdot.jp/security/05/12/21/2318216.shtml">http://slashdot.jp/security/05/12/21/2318216.shtml</anchor-external>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2005-12-22 01:14:03 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end>
<cite>Bug 4868 - ASCIIと互換性のない文字コードはユーザーの指定で選択可能にすべきでない</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=4868">http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=4868</anchor-external></p><p><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;38</anchor-internal> の問題は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-7</anchor>に限らずどんな<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>でも、可能な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ビット列</anchor>の組合わせによって生じうる。</p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> [sage])</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end>
<cite>The Old New Thing : Some files come up strange in Notepad</cite> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://blogs.msdn.com/oldnewthing/archive/2004/03/24/95235.aspx">http://blogs.msdn.com/oldnewthing/archive/2004/03/24/95235.aspx</anchor-external></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">BOM</anchor>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> [sage])</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end>
<cite xml:lang="en">I'm not a Klingon : Please avoid UTF-7</cite> (<code>2007-05-02 10:19:34 +09:00</code> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://blogs.msdn.com/shawnste/archive/2007/05/01/please-avoid-utf-7.aspx">http://blogs.msdn.com/shawnste/archive/2007/05/01/please-avoid-utf-7.aspx</anchor-external>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2007-05-02 01:22:20 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end>
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;43</anchor-internal> UTF-8 over MIME が使えない legacy な mail/NNTP
の実装ってあるのか? UTF-7 over MIME only な UA
なんて UTF-7 がでてきた極々初期くらいにしか存在しなかったのでは?</p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2007-05-02 01:24:35 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end>
<cite>葉っぱ日記 - そろそろ UTF-7 について一言いっとくか</cite> (<code>2007-07-22 01:39:26 +09:00</code> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://d.hatena.ne.jp/hasegawayosuke/20070717/p1">http://d.hatena.ne.jp/hasegawayosuke/20070717/p1</anchor-external>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <cite>REC-PICS-services-961031</cite>
( (<time>2009-11-25 03:23:30 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/REC-PICS-services/#Syntax">http://www.w3.org/TR/REC-PICS-services/#Syntax</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite>Part2 - browsersec - Browser Security Handbook, part 2 - Browser Security Handbook - Google Project Hosting</cite>
(<time>2015-03-31 16:46:58 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://code.google.com/p/browsersec/wiki/Part2#Character_set_handling_and_detection">https://code.google.com/p/browsersec/wiki/Part2#Character_set_handling_and_detection</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <cite>DRAFT-PICS-services-970620</cite>
(<time>1998-06-04 03:16:40 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.w3.org/PICS/Member/NG/DRAFT-PICS-services-970620.html#Syntax">https://www.w3.org/PICS/Member/NG/DRAFT-PICS-services-970620.html#Syntax</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <cite>REC-PICS-services-961031</cite>
(<time>1998-04-08 06:12:20 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.w3.org/TR/REC-PICS-services-961031">https://www.w3.org/TR/REC-PICS-services-961031</anchor-external></p></section></body></html>