UTF-8

UTF-8 (文字コード)

[34] UTF-8 は、世界中で広く用いられており、 LinuxWeb では原則として用いられている標準的な文字コードです。

仕様書

Unicode と UTF-8

[44] Unicode は、色々な文字符号を与えています。 その符号をどのように表現するかは選択の余地があり、 歴史的に幾つかの方法が用いられました。その中で現在最も広く用いられているのが UTF-8 です。 UTF-8文字符号を一定の規則で求められる1-4個のバイトの列として表すものです。

[45] 文字a」 (LATIN SMALL LETTER A) は UnicodeU+0061 という符号位置が割り当てられています。 これは UTF-8 ではバイト列 0x61 によって表されます。

[46] 文字」 (CJK UNIFIED IDEOGRAPH-5B57) は UnicodeU+5B57 という符号位置が割り当てられています。 これは UTF-8 ではバイト列 0xE5 0xAD 0x97 によって表されます。

定義

性質

[38] ASCII互換符号化です。

[39] 0x00-0x7F は常に U+0000-U+007F を表します。

[40] U+0000-U+10FFFF のすべての符号位置符号化できます。

[48] すべての符号位置に対応するバイト列が一意に定まります。

[49] 文字列部分一致文字列に対応するバイト列部分一致の結果が等しくなります。

[50] 文字列符号位置による整列文字列に対応するバイト列整列の結果が等しくなります。

[51] 任意のバイト列が妥当な文字列を表すとは限りません。

[52] BOM を使わない限りは、文字列を表すバイト列の単純な連結が文字列の連結となります。

BOM との関係

[2] UTF-8BOM は必須ではありません。 詳しくは BOM (>>9) を参照して下さい。 BOM 必須説は、そういうことにしたい人達が勝手に流した風説です。

[8] BOM を使うと UTF-8 の重要な性質の1つである ASCII 互換性が失われます。 多くの場合 BOM を使うのは適切ではないと考えられています。

非文字との関係

Charset 名

[13] IANA に登録された charset 名は utf-8 です。

[14] HTTP では、たまに誤って charset 名として utf8 が用いられることがあります。

Unicode の版との関係

[15] unicode-1-1-utf-8 は・・・

HTML における UTF-8

[42] XML文書<meta charset> を含む場合、その値は UTF-8 (ASCII大文字・小文字不区別) でなければなりません。 従って当該文書文字符号化は、 UTF-8 でなければなりません。

<meta charset> 参照。
[43] HTML文書<meta charset> を含まないXML文書にはこの制約は適用されません。

符号化

[108] UTF-8符号化 (UTF-8 encode) は、 符号位置ストリームストリームについて、次のようにします >>85

  1. [109] 符号化した結果を返します。
    ストリーム
    ストリーム
    符号化
    UTF-8

[113] 次の場面で使われます。

[132] UTF-8符号化が使われる場面

[111] TextEncoderencode メソッドは、UTF-8符号化を使っていませんが、実質的に等価です。

[110] 他に、符号化操作が UTF-8 について実行されることもあります。

[140] なお、仕様書としてUTF-8符号化を使っていても、実質的には同型符号化となる場合があります。


[95] BOM は生成されません。文字列の先頭に ZWNBSP がある場合、 復号UTF-8復号BOM とみなすので、 文字列に戻した時に ZWNBSP が失われてしまいます。

復号

[86] UTF-8復号 (UTF-8 decode) は、 バイトストリームストリームを次のようにします >>85

  1. [87] バッファーを、空のバイト列に設定します。
  2. [88] ストリームから3バイトをバッファー読みます。
  3. [89] バッファー0xEF 0xBB 0xBF 以外なら、
    1. [90] ストリームバッファーprependします。
  4. [91] 出力を、符号位置ストリームに設定します。
  5. [92] UTF-8復号器走らせます。 入力ストリーム出力出力とします。
  6. [93] 出力を返します。

[94] つまりこの操作は先頭の BOM を無視します。

[96] BOMなしUTF-8復号 (UTF-8 decode without BOM) は、 バイトストリームストリームを次のようにします >>85

  1. [97] 出力を、符号位置ストリームに設定します。
  2. [98] UTF-8復号器走らせます。 入力ストリーム出力出力とします。
  3. [99] 出力を返します。

[100] 先頭に BOM があったとしても、 BOM ではなく ZWNBSP とみなします。

[101] BOMなしUTF-8復号または失敗 (UTF-8 decode without BOM or fail) は、 バイトストリームストリームを次のようにします >>85

  1. [102] 出力を、符号位置ストリームに設定します。
  2. [103] 結果を、 UTF-8復号器走らせた結果に設定します。 入力ストリーム出力出力誤りモードfatal とします。
  3. [105] 結果誤りなら、
    1. [106] 失敗を返します。
  4. [107] それ以外なら、
    1. [104] 出力を返します。

[112] これらの操作は同期的に処理される手続きのような形で仕様書では記述されていますが、 実際には、呼び出される文脈次第で、入力ストリームを読みながら、読んだところから順に復号器に与え、 出力ストリームに書き込んでいくことが想定されているようです。

[114] これらの操作の呼び出される場面については、復号を参照。


[117] UTF-8復号器オブジェクトは、次の状態を持ちます >>116

UTF-8符号位置 (UTF-8 code point)
初期値は 0
UTF-8見たバイト数 (UTF-8 bytes seen)
初期値は 0
UTF-8必要バイト数 (UTF-8 bytes needed)
初期値は 0
UTF-8下境界 (UTF-8 lower boundary)
初期値は 0x80
UTF-8上境界 (UTF-8 upper boundary)
初期値は 0xBF

[118] UTF-8 復号器オブジェクト復号器取扱器は、 ストリーム字句について、次のようにします >>116

  1. [119] 字句end-of-stream なら、
    1. [122] 復号器UTF-8必要バイト数0 以外なら、
      1. [120] 復号器UTF-8必要バイト数0 に設定します。
      2. [121] 誤りを返します。
    2. [123] それ以外なら、
      1. [124] 終了済みを返します。
  2. [125] それ以外で、復号器UTF-8必要バイト数0 なら、
    1. [126] バイトにより、次表に従い、 復号器UTF-8必要バイト数UTF-8符号位置UTF-8上境界UTF-8下境界が指定されていればそれぞれ設定し、 返し値を返します。
      バイト
      バイト
      必要
      UTF-8必要バイト数
      符号位置
      UTF-8符号位置
      上界
      UTF-8上境界
      下界
      UTF-8下境界
      返す
      返し値
      バイト
      [ 0x00, 0x7F ]
      返す
      バイトと同じ値の符号位置
      バイト
      [ 0xC2, 0xDF ]
      必要
      1
      符号位置
      バイト & 0x1F
      返す
      継続
      バイト
      0xE0
      必要
      2
      下界
      0xA0
      符号位置
      バイト & 0xF
      返す
      継続
      バイト
      [ 0xE1, 0xEC ], 0xEE, 0xEF
      必要
      2
      符号位置
      バイト & 0xF
      返す
      継続
      バイト
      0xED
      必要
      2
      上界
      0x9F
      符号位置
      バイト & 0xF
      返す
      継続
      バイト
      0xF0
      必要
      3
      符号位置
      バイト & 0x7
      下界
      0x90
      返す
      継続
      バイト
      [ 0xF1, 0xF3 ]
      必要
      3
      符号位置
      バイト & 0x7
      返す
      継続
      バイト
      0xF4
      必要
      3
      符号位置
      バイト & 0x7
      上界
      0x8F
      返す
      継続
      バイト
      それ以外
      返す
      誤り
  3. [146] それ以外で、バイトが [ 復号器UTF-8下境界, 復号器UTF-8上境界 ] の範囲内にないなら、
    1. [147] 復号器UTF-8必要バイト数を、 0 に設定します。
    2. [150] 復号器UTF-8見たバイト数を、 0 に設定します。
    3. [148] 復号器UTF-8符号位置を、 0 に設定します。
    4. [149] 復号器UTF-8下境界を、0x80 に設定します。
    5. [151] 復号器UTF-8上境界を、0xBF に設定します。
    6. [152] バイトストリームprependします。
    7. [153] 誤りを返します。
  4. [154] それ以外なら、
    1. [156] 復号器UTF-8見たバイト数インクリメントします。
    2. [157] 復号器UTF-8符号位置を、 (復号器UTF-8符号位置 << 6) | (バイト & 0x3F) に設定します。
    3. [158] 復号器UTF-8下境界を、0x80 に設定します。
    4. [159] 復号器UTF-8上境界を、0xBF に設定します。
    5. [155] 復号器UTF-8必要バイト数復号器UTF-8見たバイト数が等しくなければ、
      1. [160] 継続を返します。
    6. [161] それ以外なら、
      1. [162] 符号位置を、値が復号器UTF-8符号位置符号位置に設定します。
      2. [163] 復号器UTF-8符号位置を、 0 に設定します。
      3. [164] 復号器UTF-8見たバイト数を、 0 に設定します。
      4. [165] 復号器UTF-8必要バイト数を、 0 に設定します。
      5. [166] 符号位置を返します。

[127] これより、不正なバイト列、U-00110000 以上サロゲートは、構成する各バイトU+FFFD に置き換えられます。

HTTP 認証の UTF-8

[54] 基本認証ダイジェスト認証charset="" 引数には値 UTF-8 を指定できます >>53, >>58, >>69

[55] これは、文字列NFC正規化してから、 RFC 3629 UTF-8バイト列に変換することをいいます >>53, >>69

[56] 受信者は、利用者識別子においては、 RFC 7613 UsernameCasePreserved プロファイルから : を除くすべての文字に対応しなければなりません >>53, >>69

[70] 基本認証では credentials で、 ダイジェスト認証では A1: が区切り文字として使われているため、 : は除外されているようです。

[57] 受信者は、合言葉においては、 RFC 7613 OpaqueString プロファイルからすべての文字に対応しなければなりません >>53, >>69

[71] プロファイル文字への対応は要求していますが、 プロファイル自体を適用することは要求されていないようです。 また、プロファイルで禁止されている文字を使うことを禁止はしていないようです。
[76] 「対応」というのが何を意味しているのか不明です。 利用者名合言葉に使える文字についてはHTTPとしての制約以外に、 アプリケーション組織などの制約もありそうです。 IETF組織セキュリティーポリシーアプリケーションデータベース設計などに介入しようとしているとは考えにくいですから、 プロファイルに含まれる文字であっても使えないことはありそうです。 普通サーバー利用者名合言葉が本来のものと一致しなければすべて 401 エラーにしますから、 サーバーHTTP レベルでこれらのプロファイル文字に対応しているかどうかは、 外部から観測できないように思えます。 プロファイルに従い写像正規化を適用することを指しているのだとしたら観測可能ですが、 そんな実装はあるのでしょうか。。。

歴史

ISO/IEC 10646 の定義

[36] ISO/IEC 10646 では符号位置U-7FFFFFFF まであり、そのすべてが UTF-8 でも表現できます。UTF-8 における1文字は最大6バイトで表現されます。

[37] U-00110000 以上の符号位置には文字は割り当てられていませんが (私用域が以前はありましたが削除されました。)、 UTF-8 としては現在も存在しているはずです。

RFC による定義

[41] Net-Unicode はそれに制御文字の用法や正規化に関する規定を加えたプロファイルです。

CESU-8

[7] CESU-8U+10000 以上の符号位置UTF-16 同様のサロゲートペアによって表現するものです。

CESU-8 を参照。

Web UTF-8

[19] Web Applications 1.0 は、「バイト列をUTF-8として誤り取り扱い付きで復号 (decode a byte string as UTF-8, with error handling) 」することについて規定しています。 これは、 UTF-8 バイト列文字列復号するにあたって不正なバイト列を適宜 U+FFFD に置き換える方法を定めたものです。

[17] Web Applications 1.0 r5530 Tighten up UTF-8 error handling definitions Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=9663 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5529&to=5530

[47] これは後の Encoding Standard の定義につながりました。現在の HTML StandardEncoding Standard を参照しています。

実装

Emacs で UTF-8

[11] EmacsUTF-8ファイルを開くとなぜか漢字だけ全部化ける (仮名とかは化けない) という時は .emacs とかにこう書くと直るかもよ:

(prefer-coding-system 'utf-8-unix)

Perl の UTF-8

[12] PerlEncode モジュールには「utf8」と「utf-8」 があります。「utf8」は UTF-8 っぽい符号化方式を使った Perl内部コード、「utf-8」は UnicodeUTF-8 です。

utf8 旗と utf8 文字列

・・・

use utf8

・・・

use encoding との関係

・・・

utf8 符号化

[66] PerlEncode モジュール文字符号化の名前として 「utf8」 と 「utf-8」に対応しています。 前者は Perl文字列内部符号化方式としての UTF-8 (のバイト文字列としての表現)、 後者は Unicode文字符号化方式である UTF-8 を表しています。

:utf8 PerlIO 層

[67] perldoc PerlIO にもちゃんと書いてありましたが、 PerlIO :utf8 を使った入力は不正な入力も黙って受け入れます。 読み込むファイルが UTF-8 として不正なバイト列であったとしても、警告も何も無しで、 黙って utf8 を立てた SV にするみたいです。なので、入力が不正なバイト列である可能性がある場合、 :encoding(utf8) を使う必要があります。 こちらは不正なバイト列を \xHH に置き換えるようです。

おそらく :utf8 の方が早いのでしょうが、もし不正なバイト列が混入していた場合、 読み込みの時点では何も起こらず、その後読み込んだ文字列に対して何らかの操作を行おうとした時点で Malformed UTF-8 character (fatal) というエラーが出ますので、デバッグが難しくなるかもしれません。

EBCDIC 環境との関係

・・・

メモ

[68] Perl, utf8 フラグ, ハッシュ, リテラル, =&gt; - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech ( 版) https://subtech.g.hatena.ne.jp/cho45/20100323/1269329227

Java の UTF

[1] Java が実装している UTF-8 の変種は、 U+0000 を表現するために 0xC0 0x80 を (0x00 の代わりに) 使います。 (0x00 は Java では文字列の終端を表し、文字列内には入れられません。)

  • [4] このような、「長さが最小ではない表現」は、 UTF-8 では禁止されています。もっとも、各規格は当初そのことを忘れていました。設計者は最初からそのことに注意していたらしいですが、気が抜けていたとかなんとか。
  • [5] 実際には巷の UTF-8 の decoder は最短じゃない表現を「意図どおりに」解読してしまうことがありますが、それは禁止されています。

[9] Java 修正 (modified) UTF-8 (昔は Java の世界で UTF-8 と呼ばれていたもの。) は >>1 に加えて CESU-8 らしいです。

Supplementary Characters in the Java Platform http://java.sun.com/developer/technicalArticles/Intl/Supplementary/

[10] JNI Types and Data Structures http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html

MySQL の UTF8

[25] MySQL では元々の utf8 は3バイトまでしか表せませんでした。 のちにこれは utf8mb3 という別名が付けられ、それとは別に、 4バイトまで表せる utf8mb4 が追加されています。

[61] MySQLCHARSET utf8utf8mb3 は、1文字が3バイト以下で表せる範囲の UTF-8 です。

[62] Unicode の範囲をすべて表せるためには utf8mb4 を使う必要があります。

関連

[59]

メモ

[16] Official Google Blog: Unicode nearing 50% of the web ( 版) http://googleblog.blogspot.com/2010/01/unicode-nearing-50-of-web.html

[20] Web Applications 1.0 r5940 typo in the allowed UTF-8 ranges ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5939&to=5940

[21] Web Applications 1.0 r5942 Fix the UTF-8 decoder error handling to handle a few errors I'd missed, including in particular surrogate halves. This may be a mistake; if I'm forgetting something please let me know so I can fix it. (e.g. did we decide not to catch surrogates or something?) ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5941&to=5942

[22] RFC 6120 - Extensible Messaging and Presence Protocol (XMPP): Core ( ( 版)) http://tools.ietf.org/html/rfc6120#section-11.6

[23] 「私のために争わないで」文字コードのUTF8さん、自殺 : bogusnews ( ( 版)) http://bogusne.ws/article/41580267.html

[24] IRC logs: freenode / #whatwg / 20120419 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20120419

[26] Web Applications 1.0 r7647 Embrace the Encodings specification. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7646&to=7647

[27] Provide better encoding label guidance. (Basically require utf-8 all ove... · a454d2e · whatwg/encoding ( ( 版)) https://github.com/whatwg/encoding/commit/a454d2e543964b8d5432778ff917324e8032b78c

[28] Web Applications 1.0 r7782 Strip a leading BOM from scripts in workers, if any. Also, use more of the encoding spec. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7781&to=7782

[29] 3 - JNI Types and Data Structures ( ( 版)) http://docs.oracle.com/javase/1.3/docs/guide/jni/spec/types.doc.html#16542

[30] jwerle/libutf8 ( ( 版)) https://github.com/jwerle/libutf8

[31] Web Applications 1.0 r8405 Various editorial tweaks. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8404&to=8405

[32] Gmail の (日本語での?) デフォルト設定が2014年4月中頃に ISO-2022-JP から UTF-8 に変わったようです。 (13-17 の間?)

[33] JNI Types and Data Structures ( ( 版)) http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16542

[35] Web Applications 1.0 r8722 Adjust notes on encoding detection ( ( 版)) http://html5.org/r/8722

[60] Fix #19: reword utf-8 decoder step to avoid extra parenthesis · whatwg/encoding@05d9649 ( 版) https://github.com/whatwg/encoding/commit/05d96490cba5e800e40b76bfd4acc7e7ff2981ae

[77] 【開発】.net C#でRSS/Atom feedとか読んでみる | 鍋風呂 ( 版) http://blog.ahh.jp/?p=1007

<?xml encode=”***”>が適当。結構多かった。”utf-8”となるべきところ、”utf8”となっている。

[78] Add utf-8 decode without BOM or fail for HTML · whatwg/encoding@4b20911 ( 版) https://github.com/whatwg/encoding/commit/4b209111f7ab450eb1935551159b98413b5c23e0

[79] Use utf-8 decode without BOM rather than UTF-8 decoder · whatwg/html@39a2e6c ( 版) https://github.com/whatwg/html/commit/39a2e6cde3b4820db56fabe1859de0dc0e6ed8d9

[80] Drop dependencies on Encoding Standard's decoder concept · whatwg/url@37f9329 ( 版) https://github.com/whatwg/url/commit/37f932928378c0df521034cfd223f4ba603ef476

[81] Update integration with Encoding Standard · whatwg/html@6a31c26 ( 版) https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39

[82] RFC 4194 - The S Hexdump Format ( 版) https://tools.ietf.org/html/rfc4194#section-9

Required parameters: charset

This parameter must exist and must be set to "UTF-8". No other

character sets are allowed for transporting SHF data. The character

set designator MUST be uppercase.

[83] Editorial: avoid teaching bad UTF-8 math · whatwg/encoding@19a25b5 ( 版) https://github.com/whatwg/encoding/commit/19a25b5fcae895853d964b7ee6afa2fe9b6070a8

[84] UTF-8 processing using SIMD (SSE4) () https://woboq.com/blog/utf-8-processing-using-simd.html

[128] Parse application/x-www-form-urlencoded using UTF-8 only (annevk著, ) https://github.com/whatwg/url/commit/3fe969679f78c92c353047661b0c4b6797f099f6

[129] Thunderbird/SeaMonkey の既定のテキストエンコーディングを UTF-8 に変更する · Issue #63 · mozilla-japan/gecko-l10n () https://github.com/mozilla-japan/gecko-l10n/issues/63

[130] Use Encoding's "UTF-8 encode" hook. (mkruisselbrink著, ) https://github.com/w3c/FileAPI/commit/64c346deb9132a8cefc1ce79050256cfc64fcc72

[131] RFC 8160 - IUTF8 Terminal Mode in Secure Shell (SSH) () https://tools.ietf.org/html/rfc8160

[115] Upwork API Reference () https://developers.upwork.com/?lang=python#getting-started_encoding

UTF-8 is the default encoding for XML and since 2010, it has become the dominant character set on the Web.

[133] XLIFF Version 2.0 () http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html#d0e15952

[134] For your information: Illegal UTF-8 proposal · Issue #112 · whatwg/encoding () https://github.com/whatwg/encoding/issues/112

[135] Feedback on the proposal to change U+FFFD generation when decoding ill-formed UTF-8 () http://unicode.org/pipermail/unicode/2017-May/005389.html

[136] Learderboard - Feature Phone - Mobage Developers Documentation Center () https://docs.mobage.com/display/JPFP/Leaderboard_FP

format

レスポンス形式を指定する事が出来ます。

説明

備考

json

"application/json; charset=utf8"

任意、デフォルト値

[137] 19938 – Number of decoder errors emitted by the UTF-8 decoder for incomplete/invalid sequences () https://www.w3.org/Bugs/Public/show_bug.cgi?id=19938

[138] How Many REPLACEMENT CHARACTERs? (Henri Sivonen著, ) https://hsivonen.fi/broken-utf-8/

[139] 過去に投稿された記事で、一部の「絵文字」が文字化けする不具合がありました - はてなブログ開発ブログ () http://staff.hatenablog.com/entry/2017/07/11/142000

はてなブログにこれまで投稿された一部の記事中の「絵文字」が?(クエスチョンマーク)になってしまう不具合が、2017年6月7日(水)にありました。

[141] Use Infra for JSON parsing (annevk著, ) https://github.com/whatwg/fetch/commit/d095af0ebb3343d294c37fab5c124b1a2534b6a6

[142] Use Infra for JSON parsing by annevk · Pull Request #610 · whatwg/fetch () https://github.com/whatwg/fetch/pull/610

[143] Use Infra for JSON parsing (annevk著, ) https://github.com/whatwg/xhr/commit/ed83926c8236d14cc8720f023e09658d8bdd00d3

[144] Require UTF-8 (sideshowbarker著, ) https://github.com/whatwg/html/commit/fae77e3c558b9f083dfb9086752863a4789268f5

[145] Require utf-8 when specifying character encoding by sideshowbarker · Pull Request #3091 · whatwg/html () https://github.com/whatwg/html/pull/3091

[167] Windows 10のInsider PreviewでシステムロケールをUTF-8にするオプションが追加される | スラド () https://srad.jp/story/17/11/14/0640253/

[168] Should UTF-8 'as specified in' point to the Encoding spec? · Issue #253 · w3c/imsc () https://github.com/w3c/imsc/issues/253

[169] Timed Text Working Group Teleconference -- 09 Nov 2017 () https://www.w3.org/2017/11/09-tt-minutes.html#item08

[170] A Branchless UTF-8 Decoder « null program () http://nullprogram.com/blog/2017/10/06/

[171] UTF-8 history () http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt

[172] Editorial: uppercase UTF-8 (annevk著, ) https://github.com/whatwg/xhr/commit/aeaa4432bc39ab171d6fede3790bfb4ee3255990

[173] Editorial: uppercase UTF-8 (and other encodings, if any) · Issue #196 · whatwg/xhr () https://github.com/whatwg/xhr/issues/196

[174] Editorial: rewrite send()'s body/content-type processing (domenic著, ) https://github.com/whatwg/xhr/commit/f47bbab42dabe1f52e5e9f1ed1fa6df06a6eb310

[175] Meta: UTF-8 decode without BOM or fail is used (annevk著, ) https://github.com/whatwg/encoding/commit/387b0c08430a27e99c036f64abac9b3dfb46dcd0

[176] Meta: TF-8 decode without BOM or fail is used at least once by annevk · Pull Request #124 · whatwg/encoding () https://github.com/whatwg/encoding/pull/124

[177] Do not use percent decode on strings by annevk · Pull Request #3111 · whatwg/html () https://github.com/whatwg/html/pull/3111

[178] Editorial: replace UTF-8 encode with isomorphic encode (annevk著, ) https://github.com/whatwg/fetch/commit/ffbaefb5c4f68b9d619e9db6491fd665a30a2ffb

[179] Give clearer advice on hooks for standards (annevk著, ) https://github.com/whatwg/encoding/commit/b579018b406d7752f8b7a3aa9c2bc800519c6f1a