* 仕様書

[REFS[
- [6] [CITE@en[Encoding Standard]] ([TIME[2017-04-10 23:53:26 +09:00]]) <https://encoding.spec.whatwg.org/#replacement>
]REFS]

* ラベル

[23] 次の[[ラベル][符号化ラベル]]が [[replacement]] を表します。

[FIG(short list)[
- [CODE[replacement]]
- [CODE[csiso2022kr]]
- [CODE[hz-gb-2312]]
- [CODE[iso-2022-cn]]
- [CODE[iso-2022-cn-ext]]
- [CODE[iso-2022-kr]]
]FIG]

[HISTORY[
[24] かつては、他の[[符号化][文字符号化]]とは違って、[[名前][符号化名]] [[replacement]]
は[[ラベル][符号化ラベル]]ではありませんでした。しかしその後 [CODE[replacement]]
[[ラベル][符号化ラベル]]が追加されました [SRC[>>26]]。
]HISTORY]

* 文脈

[7] [[replacement]]は、
[[サーバー]]と[[クライアント]]とで異なる[[符号化][文字符号化]]に対応している場合に、
それを使って攻撃されることを防ぐため、
使われています。 [SRC[>>6]]

[9] 過去にどこかで使われていたものの、現在の [[Web]] 
では[[互換性][Web互換性]]のためにも不要と判断される[[符号化][文字符号化]]が指定された時に、
かわりに使われます。

[EG[
[10] [CODE[hz-gb-2312]] は、かつて[[中華人民共和国]]で使われていた[[文字コード]]です。
[[電子メール]]などだけでなく、 [[Web]] でもごく限られた範囲で用いられたことがありました。
[CODE[hz-gb-2312]] は[[非ASCII文字]]を [[ASCII文字]]の範囲で表現できるという特徴をもって設計されたものですが、
それが攻撃に悪用されるおそれがあります。
]EG]

[8] [[著者]]が意図的に [[replacement]] を使う必要も、利点もありません。

* 符号化

[11] [[符号化器]]はありません。[[Webプラットフォーム]]において、
[[replacement]] で[[文字列]]を[[符号化][文字符号化]]することはありません。

;; [21] [[著者]]が [[replacement]] を指定した場合、かわりに [[UTF-8]]
が使われます。 [[符号化][文字符号化]]の特殊例の項を参照。

* 復号

[22] [[replacement]] の[[復号]]は、
入力が[[空バイト列]]なら[[空文字列]]を返し、
それ以外なら [CODE[U+FFFD]] ([[誤りモード]]が [CODE[fatal][fatal (符号化)]] なら[[誤り]])
を返します。

[25] [CODE[TextDecoder]] は [[replacement]] に対応しておらず、[[例外]]が[[投げ]]られます。

-*-*-

[12] [[復号器]]は、 [DFN[[F[replacement error returned flag]]]] を持ちます。
既定値は[[偽]]です。 [SRC[>>6]]

[13] [[復号器]]の[F[取扱器][取扱器 (符号化)]]は、[VAR[ストリーム]]と[VAR[バイト]]について、
次のようにします。 [SRC[>>6]]

[FIG(steps)[
= [14] [VAR[バイト]]が [[end-of-stream]] の場合、
== [15] [[終了済み]]を返します。
= [16] それ以外で、[F[replacement error returned flag]] が[[偽]]の場合、
== [17] [F[replacement error returned flag]] を、[[真]]に設定します。
== [18] [[誤り]]を返します。
= [19] それ以外の場合、
== [20] [[終了済み]]を返します。
]FIG]

* 歴史

[1] [CITE[Introduce a replacement encoding as a trial balloon to fixing various is... · 8329a2e · whatwg/encoding]]
( ([TIME[2013-04-04 09:26:11 +09:00]] 版))
<https://github.com/whatwg/encoding/commit/8329a2e768caea6908d600debd3cc8a6dc59c3c3>

[2] [CITE[Issue 265973003: Implement "replacement" text encoding. - Code Review]]
( ([TIME[2014-09-20 01:57:41 +09:00]] 版))
<https://codereview.chromium.org/265973003>

[3] [CITE@en[Fix #33: handle empty input better for the replacement decoder · whatwg/encoding@4e8e211]]
([TIME[2016-02-11 11:57:41 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/4e8e2111c45e02934b36bbce51157d3dbb322242>

[4] [CITE@en[Fix #29: introduce output encoding for URL and HTML forms · whatwg/encoding@02c55f2]]
([TIME[2016-02-11 11:58:50 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/02c55f23fc1968f68472d3e82e5da29c4fe0ec65>

[5] [CITE@en[Update integration with Encoding Standard · whatwg/html@6a31c26]]
([TIME[2016-02-14 18:58:05 +09:00]] 版)
<https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39>

[26] [CITE@en[Add "replacement" as label for the replacement encoding]]
([[annevk]]著, [TIME[2017-07-17 17:49:43 +09:00]])
<https://github.com/whatwg/encoding/commit/ee357f3f192b956169a2ed6fba76abe69c23e24f>

[27] [CITE@en[Add "replacement" as label for the replacement encoding by annevk · Pull Request #117 · whatwg/encoding]]
([TIME[2017-08-19 20:58:41 +09:00]])
<https://github.com/whatwg/encoding/pull/117>

[28] [CITE@en[Add "replacement" as a label for the replacement encoding · Issue #70 · whatwg/encoding]]
([TIME[2017-08-19 21:03:20 +09:00]])
<https://github.com/whatwg/encoding/issues/70>