<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><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="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite xml:lang="en">Encoding Standard</cite> (<time>2017-04-10 23:53:26 +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://encoding.spec.whatwg.org/#replacement">https://encoding.spec.whatwg.org/#replacement</anchor-external></li></ul></refs></section><section><h1>ラベル</h1><p><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> 次の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ラベル<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">符号化ラベル</title></anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</anchor> を表します。</p><figure class="short list"><ul><li><code>replacement</code></li><li><code>csiso2022kr</code></li><li><code>hz-gb-2312</code></li><li><code>iso-2022-cn</code></li><li><code>iso-2022-cn-ext</code></li><li><code>iso-2022-kr</code></li></ul></figure><history xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><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> かつては、他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">文字符号化</title></anchor>とは違って、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">符号化名</title></anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</anchor>
は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ラベル<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">符号化ラベル</title></anchor>ではありませんでした。しかしその後 <code>replacement</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ラベル<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">符号化ラベル</title></anchor>が追加されました <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>。</p></history></section><section><h1>文脈</h1><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</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:">符号化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">文字符号化</title></anchor>に対応している場合に、
それを使って攻撃されることを防ぐため、
使われています。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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></src></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> 過去にどこかで使われていたものの、現在の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web</anchor> 
では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">互換性<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Web互換性</title></anchor>のためにも不要と判断される<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">文字符号化</title></anchor>が指定された時に、
かわりに使われます。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><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> <code>hz-gb-2312</code> は、かつて<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:">Web</anchor> でもごく限られた範囲で用いられたことがありました。
<code>hz-gb-2312</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:">ASCII文字</anchor>の範囲で表現できるという特徴をもって設計されたものですが、
それが攻撃に悪用されるおそれがあります。</p></example><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>が意図的に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</anchor> を使う必要も、利点もありません。</p></section><section><h1>符号化</h1><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化器</anchor>はありません。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webプラットフォーム</anchor>において、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</anchor> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">文字符号化</title></anchor>することはありません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</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:">符号化<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">文字符号化</title></anchor>の特殊例の項を参照。</comment-p></section><section><h1>復号</h1><p><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</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>を返し、
それ以外なら <code>U+FFFD</code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">誤りモード</anchor>が <code>fatal<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">fatal (符号化)</title></code> なら<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="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <code>TextDecoder</code> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement</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><hr></hr><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">復号器</anchor>は、 <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement error returned flag</f></dfn> を持ちます。
既定値は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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></src></p><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">復号器</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取扱器<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">取扱器 (符号化)</title></f>は、<var>ストリーム</var>と<var>バイト</var>について、
次のようにします。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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></src></p><figure class="steps"><ol><li><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> <var>バイト</var>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">end-of-stream</anchor> の場合、<ol><li><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終了済み</anchor>を返します。</li></ol></li><li><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> それ以外で、<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement error returned flag</f> が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>の場合、<ol><li><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> <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">replacement error returned flag</f> を、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li><li><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">誤り</anchor>を返します。</li></ol></li><li><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> それ以外の場合、<ol><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終了済み</anchor>を返します。</li></ol></li></ol></figure></section><section><h1>歴史</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> <cite>Introduce a replacement encoding as a trial balloon to fixing various is... · 8329a2e · whatwg/encoding</cite>
( (<time>2013-04-04 09:26:11 +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://github.com/whatwg/encoding/commit/8329a2e768caea6908d600debd3cc8a6dc59c3c3">https://github.com/whatwg/encoding/commit/8329a2e768caea6908d600debd3cc8a6dc59c3c3</anchor-external></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> <cite>Issue 265973003: Implement &quot;replacement&quot; text encoding. - Code Review</cite>
( (<time>2014-09-20 01:57: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://codereview.chromium.org/265973003">https://codereview.chromium.org/265973003</anchor-external></p><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> <cite xml:lang="en">Fix #33: handle empty input better for the replacement decoder · whatwg/encoding@4e8e211</cite>
(<time>2016-02-11 11:57: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://github.com/whatwg/encoding/commit/4e8e2111c45e02934b36bbce51157d3dbb322242">https://github.com/whatwg/encoding/commit/4e8e2111c45e02934b36bbce51157d3dbb322242</anchor-external></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> <cite xml:lang="en">Fix #29: introduce output encoding for URL and HTML forms · whatwg/encoding@02c55f2</cite>
(<time>2016-02-11 11:58:50 +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://github.com/whatwg/encoding/commit/02c55f23fc1968f68472d3e82e5da29c4fe0ec65">https://github.com/whatwg/encoding/commit/02c55f23fc1968f68472d3e82e5da29c4fe0ec65</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 xml:lang="en">Update integration with Encoding Standard · whatwg/html@6a31c26</cite>
(<time>2016-02-14 18:58:05 +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://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39">https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39</anchor-external></p><p><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> <cite xml:lang="en">Add &quot;replacement&quot; as label for the replacement encoding</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-07-17 17:49: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://github.com/whatwg/encoding/commit/ee357f3f192b956169a2ed6fba76abe69c23e24f">https://github.com/whatwg/encoding/commit/ee357f3f192b956169a2ed6fba76abe69c23e24f</anchor-external></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> <cite xml:lang="en">Add &quot;replacement&quot; as label for the replacement encoding by annevk · Pull Request #117 · whatwg/encoding</cite>
(<time>2017-08-19 20:58: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://github.com/whatwg/encoding/pull/117">https://github.com/whatwg/encoding/pull/117</anchor-external></p><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> <cite xml:lang="en">Add &quot;replacement&quot; as a label for the replacement encoding · Issue #70 · whatwg/encoding</cite>
(<time>2017-08-19 21:03: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://github.com/whatwg/encoding/issues/70">https://github.com/whatwg/encoding/issues/70</anchor-external></p></section></body></html>