[34] [DFN[[[UTF-8]]]] は、世界中で広く用いられており、 [[Linux]] や [[Web]]
では原則として用いられている標準的な[[文字コード]]です。

* 仕様書

[REFS[
- [116] '''[CITE@en-US[Encoding Standard]] ([TIME[2016-07-29 16:12:31 +09:00]]) <https://encoding.spec.whatwg.org/#utf-8>'''
- [85] [CITE@en-US[Encoding Standard]] ([TIME[2016-07-29 16:12:31 +09:00]]) <https://encoding.spec.whatwg.org/#specification-hooks>
- [53] [CITE@en[RFC 7617 - The 'Basic' HTTP Authentication Scheme]] ([TIME[2015-10-01 09:47:40 +09:00]] 版) <https://tools.ietf.org/html/rfc7617#section-2.1>
- [58] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-3.3>
- [69] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-4>
]REFS]

* Unicode と UTF-8

[44] [[Unicode]] は、色々な[[文字]]に[[符号]]を与えています。
その[[符号]]をどのように表現するかは選択の余地があり、
歴史的に幾つかの方法が用いられました。その中で現在最も広く用いられているのが
[[UTF-8]] です。 [[UTF-8]] は[[文字]]の[[符号]]を一定の規則で求められる1-4個の[[バイト]]の列として表すものです。

[EG[
[45] [[文字]]「[CODE(char)[a]]」 ([CODE(charname)@en[[[LATIN SMALL LETTER A]]]]) は
[[Unicode]] で [CODE(char)[[[U+0061]]]] という[[符号位置]]が割り当てられています。
これは [[UTF-8]] では[[バイト列]] [CODE(char)[0x61]] によって表されます。
]EG]

[EG[
[46] [[文字]]「[CODE(char)[字]]」 ([CODE(charname)@en[[[CJK UNIFIED IDEOGRAPH-5B57]]]]) は
[[Unicode]] で [CODE(char)[[[U+5B57]]]] という[[符号位置]]が割り当てられています。
これは [[UTF-8]] では[[バイト列]] [CODE(char)[0xE5 0xAD 0x97]] によって表されます。
]EG]

* 定義

@@

* 性質

[38] [[ASCII互換符号化]]です。

[39] [CODE(char)[[[0x00]]]]-[CODE(char)[[[0x7F]]]] は常に
[CODE(char)[[[U+0000]]]]-[CODE(char)[[[U+007F]]]] を表します。

[40] [CODE(char)[[[U+0000]]]]-[CODE(char)[[[U+10FFFF]]]] のすべての[[符号位置]]を[[符号化]]できます。

[48] すべての[[符号位置]]に対応する[[バイト列]]が一意に定まります。

[49] [[文字列]]の[[部分一致]]と[[文字列]]に対応する[[バイト列]]の[[部分一致]]の結果が等しくなります。

[50] [[文字列]]の[[符号位置]]による[[整列]]と[[文字列]]に対応する[[バイト列]]の[[整列]]の結果が等しくなります。

[51] 任意の[[バイト列]]が妥当な[[文字列]]を表すとは限りません。

[52] [[BOM]] を使わない限りは、[[文字列]]を表す[[バイト列]]の単純な連結が[[文字列]]の連結となります。

* BOM との関係

[2] ''[CODE(charset)[UTF-8]] の [[BOM]] は必須ではありません''。
詳しくは [[BOM]>>9] を参照して下さい。 BOM 
必須説は、そういうことにしたい人達が勝手に流した風説です。

[8] [[BOM]] を使うと [[UTF-8]] の重要な性質の1つである [[ASCII]] 互換性が失われます。
多くの場合 [[BOM]] を使うのは適切ではないと考えられています。

* 非文字との関係

- [3] [[Unicode]] 3.0 以降では S-area の符号位置 (の UTF-8 表現) は禁止されています。他方、 [CODE[U+FFFF]] のような non-character (の UTF-8 表現) は禁止されていません。 non character は情報交換を目的としたものではありませんから情報交換用で紛れ込んでいたなら間違いですが、内部処理に使うことが出来るものですから、 [[UTF]] で禁止したら使う意味が無くなるということらしいです。

* Charset 名

[13] [[IANA]] に登録された [[charset]] 名は [DFN[[CODE(charset)@en[[[utf-8]]]]]] です。

[14] [[HTTP]] では、たまに誤って [[charset]] 名として [CODE(charset)@en[[[utf8]]]] 
が用いられることがあります。

** Unicode の版との関係

@@ [15] [CODE(charset)@en[[[unicode-1-1-utf-8]]]] は・・・
[[RFC 1641]],
[[RFC 2279]]

[209] [CITE[International WWW -- Internacia TTT]], [TIME[2025-06-16T15:53:28.000Z]], [TIME[1997-02-14T07:15:09.822Z]] <https://web.archive.org/web/19970214071027/http://www.cs.qub.ac.uk/~AD.Irvine/lat3.html>

>Kiam UTF-8-igante vian TTT-paĝon, nepre metu ene de <head></head> la jenon: <meta http-equiv="Content-type" content="text/html; charset=unicode-1-1-utf-8"> 



* 符号化

[108] [DFN[[RUBYB[UTF-8符号化]@en[UTF-8 encode]]]]は、
[[符号位置ストリーム]][VAR[ストリーム]]について、次のようにします [SRC[>>85]]。
[FIG(steps)[
= [109] [[符号化][符号化 (動詞)]]した結果を返します。
[FIG(list members)[
: [VAR[ストリーム]] : [VAR[ストリーム]]
: [VAR[符号化]] : [[UTF-8]]
]FIG]
]FIG]

[113] 次の場面で使われます。

[FIG(list middle)[ [132] [[UTF-8符号化]]が使われる場面
- [[UTF-8パーセント符号化]]
- [[文字列パーセント復号]]
- [CODE[Response.redirect]]
- [[fetch]] [CODE(DOMi)@en[BodyInit]] [CODE(DOMi)@en[USVString]]
- [[CORS check]]
- [CODE(JS)@en[document.cookie]]
- [CODE(HTML)@en[<meta http-equiv=Set-Cookie>]]
- [[Web Transport Processing]]
- [CODE(DOMi)@en[Blob]] [[コンストラクター]]
- [CODE(DOMi)@en[File]] [[コンストラクター]]
- [CODE[send][send (XHR)]]
- [[JSONをバイト群に直列化]]
- [[extract a byte sequence]]
]FIG]

[111] [CODE(DOMi)@en[TextEncoder]] の [CODE(DOMm)@en[encode][TextEncoder]]
[[メソッド]]は、[[UTF-8符号化]]を使っていませんが、実質的に等価です。

[110] 他に、[[符号化][符号化 (動詞)]]操作が [[UTF-8]] について実行されることもあります。

[140] なお、[[仕様書]]として[[UTF-8符号化]]を使っていても、実質的には[[同型符号化]]となる場合があります。

-*-*-

[95] [[BOM]] は生成されません。[[文字列]]の先頭に [CODE[ZWNBSP]] がある場合、
[[復号][復号 (符号化)]]や[[UTF-8復号]]は [[BOM]] とみなすので、
[[文字列]]に戻した時に [CODE[ZWNBSP]] が失われてしまいます。

* 復号

[86] [DFN[[RUBYB[UTF-8復号]@en[UTF-8 decode]]]]は、
[[バイトストリーム]][VAR[ストリーム]]を次のようにします [SRC[>>85]]。
[FIG(steps)[
= [87] [VAR[バッファー]]を、空の[[バイト列]]に設定します。
= [88] [VAR[ストリーム]]から3バイトを[VAR[バッファー]]に[[読み][読む (ストリーム)]]ます。
= [89] [VAR[バッファー]]が [CODE[0xEF 0xBB 0xBF]] ''以外''なら、
== [90] [VAR[ストリーム]]に[VAR[バッファー]]を [[prepend][prepend (ストリーム)]]します。
= [91] [VAR[出力]]を、[[符号位置ストリーム]]に設定します。
= [92] [[UTF-8]] の[F[復号器]]を[[走らせ][走らせる]]ます。
[VAR[入力]]を[VAR[ストリーム]]、[VAR[出力]]を[VAR[出力]]とします。
= [93] [VAR[出力]]を返します。
]FIG]

;; [94] つまりこの操作は先頭の [CODE(charname)@en[BOM]] を無視します。

[96] [DFN[[RUBYB[BOMなしUTF-8復号]@en[UTF-8 decode without BOM]]]]は、
[[バイトストリーム]][VAR[ストリーム]]を次のようにします [SRC[>>85]]。
[FIG(steps)[
= [97] [VAR[出力]]を、[[符号位置ストリーム]]に設定します。
= [98] [[UTF-8]] の[F[復号器]]を[[走らせ][走らせる]]ます。
[VAR[入力]]を[VAR[ストリーム]]、[VAR[出力]]を[VAR[出力]]とします。
= [99] [VAR[出力]]を返します。
]FIG]

;; [100] 先頭に [CODE(charname)@en[BOM]] があったとしても、 
[CODE(charname)@en[BOM]] ではなく [CODE(charname)@en[ZWNBSP]] とみなします。

[101] [DFN[[RUBYB[BOMなしUTF-8復号または失敗]@en[UTF-8 decode without BOM or fail]]]]は、
[[バイトストリーム]][VAR[ストリーム]]を次のようにします [SRC[>>85]]。
[FIG(steps)[
= [102] [VAR[出力]]を、[[符号位置ストリーム]]に設定します。
= [103] [VAR[結果]]を、 [[UTF-8]] の[F[復号器]]を[[走らせ][走らせる]]た結果に設定します。
[VAR[入力]]を[VAR[ストリーム]]、[VAR[出力]]を[VAR[出力]]、
[VAR[[[誤りモード]]]]を [CODE[fatal][fatal (符号化)]] とします。
= [105] [VAR[結果]]が[[誤り][誤り (符号化)]]なら、
== [106] [[失敗]]を返します。
= [107] それ以外なら、
== [104] [VAR[出力]]を返します。
]FIG]

[112] これらの操作は同期的に処理される[[手続き]]のような形で[[仕様書]]では記述されていますが、
実際には、呼び出される文脈次第で、入力ストリームを読みながら、読んだところから順に[[復号器]]に与え、
出力ストリームに書き込んでいくことが想定されているようです。

[114] これらの操作の呼び出される場面については、[[復号][復号 (符号化)]]を参照。

-*-*-

[117] [[UTF-8]] の[[復号器オブジェクト]]は、次の状態を持ちます
[SRC[>>116]]。
[FIG(list members)[
: [DFN[[F[[RUBYB[[[UTF-8符号位置]]]@en[UTF-8 code point]]]]]] :
初期値は [N[0]]。
: [DFN[[F[[RUBYB[[[UTF-8見たバイト数]]]@en[UTF-8 bytes seen]]]]]] :
初期値は [N[0]]。
: [DFN[[F[[RUBYB[[[UTF-8必要バイト数]]]@en[UTF-8 bytes needed]]]]]] :
初期値は [N[0]]。
: [DFN[[F[[RUBYB[[[UTF-8下境界]]]@en[UTF-8 lower boundary]]]]]] :
初期値は [N[0x80]]。
: [DFN[[F[[RUBYB[[[UTF-8上境界]]]@en[UTF-8 upper boundary]]]]]] :
初期値は [N[0xBF]]。
]FIG]

[118] [[UTF-8]] [[復号器オブジェクト]][VAR[復号器]]の[F[取扱器]]は、
[VAR[ストリーム]]と[VAR[字句]]について、次のようにします [SRC[>>116]]。
[FIG(steps)[
= [119] [VAR[字句]]が [[end-of-stream]] なら、
== [122] [VAR[復号器]]の[F[UTF-8必要バイト数]]が [N[0]] 以外なら、
=== [120] [VAR[復号器]]の[F[UTF-8必要バイト数]]を [N[0]] に設定します。
=== [121] [[誤り][誤り (符号化)]]を返します。
== [123] それ以外なら、
=== [124] [[終了済み][終了済み (符号化)]]を返します。
= [125] それ以外で、[VAR[復号器]]の[F[UTF-8必要バイト数]]が [N[0]] なら、
== [126] [VAR[バイト]]により、次表に従い、
[VAR[復号器]]の[F[UTF-8必要バイト数]]、[F[UTF-8符号位置]]、[F[UTF-8上境界]]、
[F[UTF-8下境界]]が指定されていればそれぞれ設定し、
[VAR[返し値]]を返します。
[FIG(table)[
:バイト: [VAR[バイト]]
:必要: [F[UTF-8必要バイト数]]
:符号位置: [F[UTF-8符号位置]]
:上界: [F[UTF-8上境界]]
:下界: [F[UTF-8下境界]]
:返す: [VAR[返し値]]

:バイト:   [ [N[0x00]], [N[0x7F]] ]
:返す:     [VAR[バイト]]と同じ値の[[符号位置]]

:バイト:   [ [N[0xC2]], [N[0xDF]] ]
:必要:     [N[1]]
:符号位置: [VAR[バイト]] [[&]] [N[0x1F]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   [N[0xE0]]
:必要:     [N[2]]
:下界:     [N[0xA0]]
:符号位置: [VAR[バイト]] [[&]] [N[0xF]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   [ [N[0xE1]], [N[0xEC]] ], [N[0xEE]], [N[0xEF]]
:必要:     [N[2]]
:符号位置: [VAR[バイト]] [[&]] [N[0xF]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   [N[0xED]]
:必要:     [N[2]]
:上界:     [N[0x9F]]
:符号位置: [VAR[バイト]] [[&]] [N[0xF]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   [N[0xF0]]
:必要:     [N[3]]
:符号位置: [VAR[バイト]] [[&]] [N[0x7]]
:下界:     [N[0x90]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   [ [N[0xF1]], [N[0xF3]] ]
:必要:     [N[3]]
:符号位置: [VAR[バイト]] [[&]] [N[0x7]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   [N[0xF4]]
:必要:     [N[3]]
:符号位置: [VAR[バイト]] [[&]] [N[0x7]]
:上界:     [N[0x8F]]
:返す:     [[継続][継続 (符号化)]]

:バイト:   それ以外
:返す:     [[誤り][誤り (符号化)]]
]FIG]
= [146] それ以外で、[VAR[バイト]]が [ [VAR[復号器]]の[F[UTF-8下境界]], [VAR[復号器]]の[F[UTF-8上境界]] ] の範囲内に''ない''なら、
== [147] [VAR[復号器]]の[F[UTF-8必要バイト数]]を、 [N[0]] に設定します。
== [150] [VAR[復号器]]の[F[UTF-8見たバイト数]]を、 [N[0]] に設定します。
== [148] [VAR[復号器]]の[F[UTF-8符号位置]]を、 [N[0]] に設定します。
== [149] [VAR[復号器]]の[F[UTF-8下境界]]を、[N[0x80]] に設定します。
== [151] [VAR[復号器]]の[F[UTF-8上境界]]を、[N[0xBF]] に設定します。
== [152] [VAR[バイト]]を[VAR[ストリーム]]に[[prepend][prepend (ストリーム)]]します。
== [153] [[誤り][誤り (符号化)]]を返します。
= [154] それ以外なら、
== [156] [VAR[復号器]]の[F[UTF-8見たバイト数]]を[[インクリメント]]します。
== [157] [VAR[復号器]]の[F[UTF-8符号位置]]を、
([VAR[復号器]]の[F[UTF-8符号位置]] [[<<]] 6) [[|]] ([VAR[バイト]] [[&]] [N[0x3F]])
に設定します。
== [158] [VAR[復号器]]の[F[UTF-8下境界]]を、[N[0x80]] に設定します。
== [159] [VAR[復号器]]の[F[UTF-8上境界]]を、[N[0xBF]] に設定します。
== [155] [VAR[復号器]]の[F[UTF-8必要バイト数]]と[VAR[復号器]]の[F[UTF-8見たバイト数]]が等しくなければ、
=== [160] [[継続][継続 (符号化)]]を返します。
== [161] それ以外なら、
=== [162] [VAR[符号位置]]を、値が[VAR[復号器]]の[F[UTF-8符号位置]]の[[符号位置]]に設定します。
=== [163] [VAR[復号器]]の[F[UTF-8符号位置]]を、 [N[0]] に設定します。
=== [164] [VAR[復号器]]の[F[UTF-8見たバイト数]]を、 [N[0]] に設定します。
=== [165] [VAR[復号器]]の[F[UTF-8必要バイト数]]を、 [N[0]] に設定します。
=== [166] [VAR[符号位置]]を返します。
]FIG]

[127] これより、不正なバイト列、[CODE(char)[U-00110000]] [[以上]]、
[[サロゲート]]は、構成する各[[バイト]]が [CODE(char)[U+FFFD]] に置き換えられます。


* 文脈

[FIG(short list)[ [215] [[UTF-8]] を採用

- [[general purpose bit 11]]
- [[Info-Zip Unicode]]

]FIG]

** HTML における UTF-8

[42] [[XML文書]]が [CODE(HTML)@en[[[<meta charset>]]]] を含む場合、その値は
[CODE(charset)@en[[[UTF-8]]]] ([[ASCII大文字・小文字不区別]]) でなければなりません。
従って当該[[文書]]の[[文字符号化]]は、 [[UTF-8]] でなければなりません。

;; [CODE(HTML)@en[[[<meta charset>]]]] 参照。

;; [43] [[HTML文書]]や [CODE(HTML)@en[[[<meta charset>]]]] を含まない[[XML文書]]にはこの制約は適用されません。


** HTTP 認証の [CODE(charset)@en[UTF-8]]

[54] [[基本認証]]や[[ダイジェスト認証]]の [CODE(HTTP)@en[[[charset=""]]]] [[引数]]には値
[DFN[[CODE(charset)@en[[[UTF-8]]]]]] を指定できます [SRC[>>53, >>58, >>69]]。

[55] これは、[[文字列]]を [[NFC]] で[[正規化]]してから、
[[RFC 3629]] [[UTF-8]] で[[バイト列]]に変換することをいいます [SRC[>>53, >>69]]。

[56] [[受信者]]は、[[利用者識別子]]においては、
[[RFC 7613]] [CODE[[[UsernameCasePreserved]]]] プロファイルから
[CODE[[[:]]]] を除くすべての[[文字]]に対応しなければ[['''なりません''']] [SRC[>>53, >>69]]。

[REFS[
- [74] [CITE@en[Character set "UTF-8 username character"]] ([TIME[2016-01-04 23:18:56 +09:00]] 版) <https://chars.suikawiki.org/set/%24rfc7616%3AUTF-8%3Ausername-char>
- [75] [CITE@en[Character set "UTF-8 user-id character"]] ([TIME[2016-01-04 23:19:15 +09:00]] 版) <https://chars.suikawiki.org/set/%24rfc7617%3AUTF-8%3Auser-id-char>
]REFS]

;; [70] [[基本認証]]では [[credentials]] で、
[[ダイジェスト認証]]では [VAR[[[A1]]]] で [CODE[[[:]]]]
が区切り文字として使われているため、
[CODE[[[:]]]] は除外されているようです。

[57] [[受信者]]は、[[合言葉]]においては、
[[RFC 7613]] [CODE[[[OpaqueString]]]] プロファイルからすべての[[文字]]に対応しなければ[['''なりません''']] [SRC[>>53, >>69]]。

[REFS[
- [72] [CITE@en[Character set "UTF-8 password character"]] ([TIME[2016-01-04 23:18:02 +09:00]] 版) <https://chars.suikawiki.org/set/%24rfc7616%3AUTF-8%3Apassword-char>
- [73] [CITE@en[Character set "UTF-8 password character"]] ([TIME[2016-01-04 23:18:37 +09:00]] 版) <https://chars.suikawiki.org/set/%24rfc7617%3AUTF-8%3Apassword-char>
]REFS]

;; [71] [[プロファイル]]の[[文字]]への対応は要求していますが、
[[プロファイル]]自体を適用することは要求されていないようです。
また、[[プロファイル]]で禁止されている[[文字]]を使うことを禁止はしていないようです。

;; [76] 「対応」というのが何を意味しているのか不明です。
[[利用者名]]や[[合言葉]]に使える[[文字]]については[[HTTP]]としての制約以外に、
[[アプリケーション]]や[[組織]]などの制約もありそうです。
[[IETF]] が[[組織]]の[[セキュリティーポリシー]]や[[アプリケーション]]の[[データベース]]設計などに介入しようとしているとは考えにくいですから、
[[プロファイル]]に含まれる[[文字]]であっても使えないことはありそうです。
普通[[サーバー]]は[[利用者名]]や[[合言葉]]が本来のものと一致しなければすべて
[CODE(HTTP)[[[401]]]] エラーにしますから、
[[サーバー]]が [[HTTP]] レベルでこれらの[[プロファイル]]の[[文字]]に対応しているかどうかは、
外部から観測できないように思えます。
[[プロファイル]]に従い[[写像]]や[[正規化]]を適用することを指しているのだとしたら観測可能ですが、
そんな実装はあるのでしょうか。。。

* テストデータ

[211] 
[CITE[null]], [TIME[2015-08-28T17:41:21.000Z]], [TIME[2025-06-25T02:53:19.299Z]] <https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt>

[210] 
[CITE@en[GitHub - flenniken/utf8tests: UTF-8 test cases and a UTF-8 decoder.]], [TIME[2025-06-25T02:52:01.000Z]] <https://github.com/flenniken/utf8tests>


* 歴史

** FSS-UTF

[203] [CITE[wg20-n193-fss-utf.pdf]], [TIME[2009-02-13T23:43:50.000Z]], [TIME[2023-07-16T14:42:44.520Z]] <https://www.unicode.org/L2/Historical/wg20-n193-fss-utf.pdf>

** ISO/IEC 10646 の定義

[36] [[ISO/IEC 10646]] では[[符号位置]]が [CODE(char)[[[U-7FFFFFFF]]]]
まであり、そのすべてが [[UTF-8]] でも表現できます。[[UTF-8]]
における1[[文字]]は最大6[[バイト]]で表現されます。

;; [37] [CODE(char)[[[U-00110000]]]] 以上の[[符号位置]]には[[文字]]は割り当てられていませんが
([[私用域]]が以前はありましたが削除されました。)、
[[UTF-8]] としては現在も存在しているはずです。

** RFC による定義

[196] [CITE@en[RFC 2044 - UTF-8, a transformation format of Unicode and ISO 10646]], [TIME[2021-01-31T15:16:01.000Z]], [TIME[2021-03-22T09:58:50.095Z]] <https://tools.ietf.org/html/rfc2044>

[197] [CITE@en[RFC 2279 - UTF-8, a transformation format of ISO 10646]], [TIME[2021-03-14T22:21:32.000Z]], [TIME[2021-03-23T12:03:30.417Z]] <https://tools.ietf.org/html/rfc2279>

- [6] [WEAK[2003-11-10 23:49:29 +00:00]] ''[[名無しさん]]'': ついに IETF Full Standard の [[RFC3629]] (= [[STD63]]) がでました。

[41] [[Net-Unicode]] はそれに[[制御文字]]の用法や[[正規化]]に関する規定を加えた[[プロファイル]]です。

[199] [[RFC 3629]] を参照:
[[IETF]] 版 [[JSON]], 
[[SASL]] [[ANONYMOUS]]

[200] 
[[JOSE]] は [[RFC 3629]] を参照し、
[DFN[[CODE[UTF8(STRING)]]]]
という[[関数]]風の表記法で仕様を記述しています。
[SRC[>>191, >>195, >>202, >>187]]

-
[FIG(quote)[
[FIGCAPTION[
[191] [CITE@en[[[RFC 7515]] - JSON Web Signature (JWS)]]
([TIME[2020-03-29 16:13:43 +09:00]])
<https://tools.ietf.org/html/rfc7515#section-1.1>
]FIGCAPTION]

> UTF8(STRING) denotes the octets of the UTF-8 '''['''RFC3629''']''' representation
>    of STRING, where STRING is a sequence of zero or more Unicode
>    '''['''UNICODE''']''' characters.

]FIG]
-
[195] 
[CITE@en[[[RFC 7516]] - JSON Web Encryption (JWE)]], [TIME[2022-11-23T02:45:29.000Z]] <https://datatracker.ietf.org/doc/html/rfc7516#section-1.1>
-
[202] 
[CITE@en[[[RFC 7517]]: JSON Web Key (JWK)]], [TIME[2022-11-25T08:33:34.000Z]] <https://www.rfc-editor.org/rfc/rfc7517.html#section-1.1>
-
[FIG(quote)[
[FIGCAPTION[
[187] [CITE@en[[[RFC 7518]] - JSON Web Algorithms (JWA)]]
([TIME[2019-11-27 04:11:14 +09:00]])
<https://tools.ietf.org/html/rfc7518#section-1.1>
]FIGCAPTION]

> UTF8(STRING) denotes the octets of the UTF-8 '''['''RFC3629''']''' representation
>    of STRING, where STRING is a sequence of zero or more Unicode
>    '''['''UNICODE''']''' characters.

]FIG]

;; [201] 似た [CODE[ASCII(STRING)]] があります。

** MLSF

[SEE[ [[MLSF]] ]]

** UTF-8b

[SEE[ [[UTF-8b]]

** CESU-8

[7] [[CESU-8]] は [CODE(char)[[[U+10000]]]] 以上の[[符号位置]]を [[UTF-16]]
同様の[[サロゲートペア]]によって表現するものです。
[SEE[ [[CESU-8]] ]]

** Web UTF-8

[19] [[Web Applications 1.0]] は、「[DFN[[RUBYB[バイト列をUTF-8として誤り取り扱い付きで復号]@en[decode a byte string as UTF-8, with error handling]]]]」することについて規定しています。
これは、 [[UTF-8]] [[バイト列]]を[[文字列]]に[[復号]]するにあたって不正な[[バイト列]]を適宜
[CODE(char)[[[U+FFFD]]]] に置き換える方法を定めたものです。

[REFS[
- [18] [[Web Applications 1.0]]
<http://www.whatwg.org/specs/web-apps/current-work/complete.html#decoded-as-utf-8,-with-error-handling>
]REFS]

[17] [CITE@en[Web Applications 1.0 r5530     Tighten up UTF-8 error handling definitions Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=9663]]
( ([TIME[2010-09-29 04:16:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5529&to=5530>

[47] これは後の [[Encoding Standard]] の定義につながりました。現在の [[HTML Standard]]
は [[Encoding Standard]] を参照しています。

* 実装

** [CITE[Emacs]]

[SEE[ [[Emacsにおける文字コード]] ]]



** Perl の UTF-8

[SEE[ [[utf8 (Perl)]] ]]

** Java の UTF

[1] [[Java]] が実装している UTF-8 の変種は、 U+0000 を表現するために
0xC0 0x80 を (0x00 の代わりに) 使います。 (0x00 は Java 
では文字列の終端を表し、文字列内には入れられません。)
- [4] このような、「長さが最小ではない表現」は、 UTF-8 では禁止されています。[WEAK[もっとも、各規格は当初そのことを忘れていました。設計者は最初からそのことに注意していたらしいですが、気が抜けていたとかなんとか。]]
- [5] 実際には巷の UTF-8 の decoder は最短じゃない表現を「意図どおりに」解読してしまうことがありますが、それは禁止されています。

[9]
[Q[Java [RUBYB[修正] [modified]] UTF-8]] (昔は Java の世界で [Q[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>

[66] 
[CITE@en[JNI Types and Data Structures]], [TIME[2025-12-06T06:59:53.000Z]] <https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html#wp16542>

[204] [CITE@ja[DataInput (Java Platform SE 8 )]], [TIME[2023-09-25T04:33:17.000Z]] <https://docs.oracle.com/javase/jp/8/docs/api/java/io/DataInput.html#modified-utf-8>

[68] 
[CITE@en[DataInput (Java Platform SE 8 )]], [TIME[2025-12-06T07:01:09.000Z]] <https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8>

[67] 
[CITE@en[Java Modified UTF-8 Encoding — py2jdbc 0.0.6dev3 documentation]], [TIME[2021-01-29T13:07:09.000Z]], [TIME[2025-12-06T07:00:47.553Z]] <https://py2jdbc.readthedocs.io/en/latest/mutf8.html>



[206] 
関連: [[ZIPのファイル名]]

** MySQL の UTF8

[25] [[MySQL]] では元々の [CODE[[[utf8]]]] は3バイトまでしか表せませんでした。
のちにこれは [CODE[[[utf8mb3]]]] という別名が付けられ、それとは別に、
4バイトまで表せる [CODE[[[utf8mb4]]]] が追加されています。

[61] [[MySQL]] の [CODE[[[CHARSET]]]] [DFN[[CODE[utf8]]]]、[DFN[[CODE[utf8mb3]]]] は、1文字が3バイト以下で表せる範囲の
[[UTF-8]] です。

[62] [[Unicode]] の範囲をすべて表せるためには [CODE[[[utf8mb4]]]] を使う必要があります。

[REFS[
-[63] [CITE@ja[MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.7 Unicodeのサポート]]
([TIME[2009-09-28 15:58:25 +09:00]] 版)
<http://dev.mysql.com/doc/refman/5.1/ja/charset-unicode.html>
-[64] [CITE@en[MySQL :: MySQL 5.5 Reference Manual :: 10.1.10.4 The utf8 Character Set (3-Byte UTF-8 Unicode Encoding)]]
( ([TIME[2012-12-15 08:37:37 +09:00]] 版))
<http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8.html>
-[65] [CITE@en[MySQL :: MySQL 5.5 Reference Manual :: 10.1.10.5 The utf8mb3 “Character Set” (Alias for utf8)]]
( ([TIME[2012-12-15 08:38:03 +09:00]] 版))
<http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb3.html>
]REFS]

** [CODE[UTF8UTF8]]

[SEE[ [[UTF8UTF8]] ]]

* 関連

[59] 
[FIG(short list)[
- [[CESU-8]]
- [[WTF-8]]
- [[WTF-8 (Windows Transformation Format)]]
- [[UTF-EBCDIC]]
- [[UTF-8-MAC]]
]FIG]

* メモ

[16] [CITE[Official Google Blog: Unicode nearing 50% of the web]]
([TIME[2010-01-29 05:36:25 +09:00]] 版)
<http://googleblog.blogspot.com/2010/01/unicode-nearing-50-of-web.html>


[20] [CITE@en[Web Applications 1.0 r5940       typo in the allowed UTF-8 ranges]]
( ([TIME[2011-03-04 11:06:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5939&to=5940>

[21] [CITE@en[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?)]]
( ([TIME[2011-03-04 11:56:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5941&to=5942>

[22] [CITE@en[RFC 6120 - Extensible Messaging and Presence Protocol (XMPP): Core]]
( ([TIME[2011-03-31 08:23:45 +09:00]] 版))
<http://tools.ietf.org/html/rfc6120#section-11.6>

[23] [CITE[「私のために争わないで」文字コードのUTF8さん、自殺 : bogusnews]]
( ([TIME[2012-04-01 10:06:51 +09:00]] 版))
<http://bogusne.ws/article/41580267.html>

[24] [CITE[IRC logs: freenode / #whatwg / 20120419]]
( ([TIME[2012-04-24 21:49:36 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120419>

[26] [CITE@en[Web Applications 1.0 r7647 Embrace the Encodings specification.]]
( ([TIME[2013-01-24 10:38:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7646&to=7647>

[27] [CITE[Provide better encoding label guidance. (Basically require utf-8 all ove... · a454d2e · whatwg/encoding]]
( ([TIME[2013-02-16 12:48:30 +09:00]] 版))
<https://github.com/whatwg/encoding/commit/a454d2e543964b8d5432778ff917324e8032b78c>

[28] [CITE@en[Web Applications 1.0 r7782     Strip a leading BOM from scripts in workers, if any. Also, use more of the encoding spec.]]
( ([TIME[2013-03-30 03:45:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7781&to=7782>

[29] [CITE[ 3 - JNI Types and Data Structures ]]
( ([TIME[2011-09-07 21:57:56 +09:00]] 版))
<http://docs.oracle.com/javase/1.3/docs/guide/jni/spec/types.doc.html#16542>

[30] [CITE[jwerle/libutf8]]
( ([TIME[2013-12-16 00:12:32 +09:00]] 版))
<https://github.com/jwerle/libutf8>

[31] [CITE@en[Web Applications 1.0 r8405 Various editorial tweaks.]]
( ([TIME[2014-01-17 17:12:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8404&to=8405>

[32] [[Gmail]] の (日本語での?) デフォルト設定が2014年4月中頃に [[ISO-2022-JP]] から [[UTF-8]]
に変わったようです。 (13-17 の間?)


[33] [CITE@en-US[JNI Types and Data Structures]]
( ([TIME[2014-05-08 13:10:38 +09:00]] 版))
<http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16542>

[35] [CITE@en[Web Applications 1.0 r8722 Adjust notes on encoding detection]]
( ([TIME[2014-08-28 08:12:00 +09:00]] 版))
<http://html5.org/r/8722>

[60] [CITE@en[Fix #19: reword utf-8 decoder step to avoid extra parenthesis · whatwg/encoding@05d9649]]
([TIME[2015-12-16 12:30:40 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/05d96490cba5e800e40b76bfd4acc7e7ff2981ae>

[FIG(quote)[
[FIGCAPTION[
[77] [CITE@ja[【開発】.net C#でRSS/Atom feedとか読んでみる | 鍋風呂]]
([TIME[2016-01-07 17:51:33 +09:00]] 版)
<http://blog.ahh.jp/?p=1007>
]FIGCAPTION]

> <?xml encode=”***”>が適当。結構多かった。”utf-8”となるべきところ、”utf8”となっている。

]FIG]


[78] [CITE@en[Add utf-8 decode without BOM or fail for HTML · whatwg/encoding@4b20911]]
([TIME[2016-02-10 21:42:33 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/4b209111f7ab450eb1935551159b98413b5c23e0>

[79] [CITE@en[Use utf-8 decode without BOM rather than UTF-8 decoder · whatwg/html@39a2e6c]]
([TIME[2016-02-10 21:44:11 +09:00]] 版)
<https://github.com/whatwg/html/commit/39a2e6cde3b4820db56fabe1859de0dc0e6ed8d9>

[80] [CITE@en[Drop dependencies on Encoding Standard's decoder concept · whatwg/url@37f9329]]
([TIME[2016-02-11 12:00:57 +09:00]] 版)
<https://github.com/whatwg/url/commit/37f932928378c0df521034cfd223f4ba603ef476>

[81] [CITE@en[Update integration with Encoding Standard · whatwg/html@6a31c26]]
([TIME[2016-02-14 18:47:22 +09:00]] 版)
<https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39>

[FIG(quote)[
[FIGCAPTION[
[82] [CITE@en[RFC 4194 - The S Hexdump Format]]
([TIME[2015-12-13 15:30:39 +09:00]] 版)
<https://tools.ietf.org/html/rfc4194#section-9>
]FIGCAPTION]

> 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.

]FIG]


[83] [CITE@en[Editorial: avoid teaching bad UTF-8 math · whatwg/encoding@19a25b5]]
([TIME[2016-04-07 11:08:35 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/19a25b5fcae895853d964b7ee6afa2fe9b6070a8>

[84] [CITE[UTF-8 processing using SIMD (SSE4)]]
([TIME[2016-05-25 18:28:34 +09:00]])
<https://woboq.com/blog/utf-8-processing-using-simd.html>

[128] [CITE@en[Parse application/x-www-form-urlencoded using UTF-8 only]]
([[annevk]]著, [TIME[2017-01-17 19:11:02 +09:00]])
<https://github.com/whatwg/url/commit/3fe969679f78c92c353047661b0c4b6797f099f6>

[129] [CITE@en[Thunderbird/SeaMonkey の既定のテキストエンコーディングを UTF-8 に変更する · Issue #63 · mozilla-japan/gecko-l10n]]
([TIME[2017-02-04 13:50:20 +09:00]])
<https://github.com/mozilla-japan/gecko-l10n/issues/63>

[130] [CITE@en[Use Encoding's "UTF-8 encode" hook.]]
([[mkruisselbrink]]著, [TIME[2017-02-04 09:05:21 +09:00]])
<https://github.com/w3c/FileAPI/commit/64c346deb9132a8cefc1ce79050256cfc64fcc72>

[131] [CITE@en[RFC 8160 - IUTF8 Terminal Mode in Secure Shell (SSH)]]
([TIME[2017-04-20 17:11:00 +09:00]])
<https://tools.ietf.org/html/rfc8160>

[FIG(quote)[
[FIGCAPTION[
[115] [CITE@en[Upwork API Reference]]
([TIME[2017-03-13 18:51:45 +09:00]])
<https://developers.upwork.com/?lang=python#getting-started_encoding>
]FIGCAPTION]

> UTF-8 is the default encoding for XML and since 2010, it has become the dominant character set on the Web.

]FIG]


[133] [CITE[XLIFF Version 2.0]]
([TIME[2014-08-06 01:00:00 +09:00]])
<http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html#d0e15952>

[134] [CITE@en[For your information: Illegal UTF-8 proposal · Issue #112 · whatwg/encoding]]
([TIME[2017-05-16 13:19:52 +09:00]])
<https://github.com/whatwg/encoding/issues/112>

[135] [CITE[Feedback on the proposal to change U+FFFD generation when decoding ill-formed UTF-8]]
([TIME[2017-05-16 00:37:21 +09:00]])
<http://unicode.org/pipermail/unicode/2017-May/005389.html>

[FIG(quote)[
[FIGCAPTION[
[136] [CITE[Learderboard - Feature Phone - Mobage Developers Documentation Center]]
([TIME[2017-05-18 01:16:25 +09:00]])
<https://docs.mobage.com/display/JPFP/Leaderboard_FP>
]FIGCAPTION]

> format
> レスポンス形式を指定する事が出来ます。
> 値
> 説明
> 備考
> json
> "application/json; charset=utf8"
> 任意、デフォルト値
> 

]FIG]


[137] [CITE@en[19938 – Number of decoder errors emitted by the UTF-8 decoder for incomplete/invalid sequences]]
([TIME[2017-05-20 13:17:18 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=19938>

[138] [CITE@en[How Many REPLACEMENT CHARACTERs?]]
([[Henri Sivonen]]著, [TIME[2017-05-31 21:26:02 +09:00]])
<https://hsivonen.fi/broken-utf-8/>

[FIG(quote)[
[FIGCAPTION[
[139] [CITE@ja[過去に投稿された記事で、一部の「絵文字」が文字化けする不具合がありました - はてなブログ開発ブログ]]
([TIME[2017-07-11 17:44:37 +09:00]])
<http://staff.hatenablog.com/entry/2017/07/11/142000>
]FIGCAPTION]

> はてなブログにこれまで投稿された一部の記事中の「絵文字」が?(クエスチョンマーク)になってしまう不具合が、2017年6月7日(水)にありました。

]FIG]


[141] [CITE@en[Use Infra for JSON parsing]]
([[annevk]]著, [TIME[2017-09-29 21:18:40 +09:00]])
<https://github.com/whatwg/fetch/commit/d095af0ebb3343d294c37fab5c124b1a2534b6a6>

[142] [CITE@en[Use Infra for JSON parsing by annevk · Pull Request #610 · whatwg/fetch]]
([TIME[2017-10-06 15:01:48 +09:00]])
<https://github.com/whatwg/fetch/pull/610>

[143] [CITE@en[Use Infra for JSON parsing]]
([[annevk]]著, [TIME[2017-09-29 21:22:12 +09:00]])
<https://github.com/whatwg/xhr/commit/ed83926c8236d14cc8720f023e09658d8bdd00d3>

[144] [CITE@en[Require UTF-8]]
([[sideshowbarker]]著, [TIME[2017-10-06 19:09:17 +09:00]])
<https://github.com/whatwg/html/commit/fae77e3c558b9f083dfb9086752863a4789268f5>

[145] [CITE@en[Require utf-8 when specifying character encoding by sideshowbarker · Pull Request #3091 · whatwg/html]]
([TIME[2017-11-03 19:52:38 +09:00]])
<https://github.com/whatwg/html/pull/3091>

[167] [CITE@ja[Windows 10のInsider PreviewでシステムロケールをUTF-8にするオプションが追加される | スラド]]
([TIME[2017-11-14 18:22:51 +09:00]])
<https://srad.jp/story/17/11/14/0640253/>

[168] [CITE@en[Should UTF-8 'as specified in' point to the Encoding spec? · Issue #253 · w3c/imsc]]
([TIME[2017-11-21 11:58:08 +09:00]])
<https://github.com/w3c/imsc/issues/253>

[169] [CITE@en[Timed Text Working Group Teleconference -- 09 Nov 2017]]
([TIME[2017-11-11 10:30:00 +09:00]])
<https://www.w3.org/2017/11/09-tt-minutes.html#item08>

[170] [CITE@en[A Branchless UTF-8 Decoder « null program]]
([TIME[2017-12-22 10:57:17 +09:00]])
<http://nullprogram.com/blog/2017/10/06/>

[171] [CITE[UTF-8 history]]
([TIME[2009-06-30 20:00:24 +09:00]])
<http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt>

[172] [CITE@en[Editorial: uppercase UTF-8]]
([[annevk]]著, [TIME[2018-04-17 18:41:45 +09:00]])
<https://github.com/whatwg/xhr/commit/aeaa4432bc39ab171d6fede3790bfb4ee3255990>

[173] [CITE@en[Editorial: uppercase UTF-8 (and other encodings, if any) · Issue #196 · whatwg/xhr]]
([TIME[2018-04-18 13:26:11 +09:00]])
<https://github.com/whatwg/xhr/issues/196>

[174] [CITE@en[Editorial: rewrite send()'s body/content-type processing]]
([[domenic]]著, [TIME[2018-04-24 00:09:11 +09:00]])
<https://github.com/whatwg/xhr/commit/f47bbab42dabe1f52e5e9f1ed1fa6df06a6eb310>

[175] [CITE@en[Meta: UTF-8 decode without BOM or fail is used]]
([[annevk]]著, [TIME[2018-04-25 18:33:26 +09:00]])
<https://github.com/whatwg/encoding/commit/387b0c08430a27e99c036f64abac9b3dfb46dcd0>

[176] [CITE@en[Meta: TF-8 decode without BOM or fail is used at least once by annevk · Pull Request #124 · whatwg/encoding]]
([TIME[2018-04-26 15:27:04 +09:00]])
<https://github.com/whatwg/encoding/pull/124>

[177] [CITE@en[Do not use percent decode on strings by annevk · Pull Request #3111 · whatwg/html]]
([TIME[2018-05-25 01:08:35 +09:00]])
<https://github.com/whatwg/html/pull/3111>

[178] [CITE@en[Editorial: replace UTF-8 encode with isomorphic encode]]
([[annevk]]著, [TIME[2018-05-28 21:03:01 +09:00]])
<https://github.com/whatwg/fetch/commit/ffbaefb5c4f68b9d619e9db6491fd665a30a2ffb>

[179] [CITE@en[Give clearer advice on hooks for standards]]
([[annevk]]著, [TIME[2018-04-25 21:22:45 +09:00]])
<https://github.com/whatwg/encoding/commit/b579018b406d7752f8b7a3aa9c2bc800519c6f1a>

[180] [CITE@en[Do not use percent decode on strings]]
([[annevk]]著, [TIME[2017-10-10 21:54:23 +09:00]])
<https://github.com/whatwg/html/commit/ce8404fa5d8c2c91725c5262fd69d0d45c227ec8>

[181] [CITE@en[Do not use percent decode on strings by annevk · Pull Request #3111 · whatwg/html]]
([TIME[2019-02-25 17:54:38 +09:00]])
<https://github.com/whatwg/html/pull/3111>

[182] [CITE@en[Limit Content-Type overrides to when charset isn't already UTF-8]]
([[annevk]]著, [TIME[2018-10-31 00:23:33 +09:00]])
<https://github.com/whatwg/xhr/commit/721f3c9f3d64aa1ae528efb78468f8c4c7213f91>

[183] [CITE[UTF-8のコードポイントはどうやって高速に数えるか - Qiita]]
([TIME[2019-04-06 11:42:20 +09:00]])
<https://qiita.com/saka1_p/items/ff49d981cfd56f3588cc>

[184] [CITE@en[Require UTF-8 for accept-charset]]
([[annevk]]著, [TIME[2018-11-23 22:52:22 +09:00]])
<https://github.com/whatwg/html/commit/840e22fe5d9be9c3c8c712150c0b98c7a4c62933>

[185] [CITE@en[Consider restricting <form accept-charset> to utf-8 · Issue #3097 · whatwg/html]]
([TIME[2019-06-20 12:36:39 +09:00]])
<https://github.com/whatwg/html/issues/3097>

[186] [CITE@en[Require UTF-8 for accept-charset by annevk · Pull Request #4195 · whatwg/html]]
([TIME[2019-06-20 12:39:27 +09:00]])
<https://github.com/whatwg/html/pull/4195>


[FIG(quote)[
[FIGCAPTION[
[188] [CITE[VRML97, ISO/IEC 14772-1:1997 -- 4 Concepts]]
([TIME[2014-01-31 07:20:50 +09:00]])
<https://www.web3d.org/documents/specifications/14772/V2.0/part1/concepts.html#4.2.2>
]FIGCAPTION]

> The <encoding type> is either "utf8" or any other authorized values defined in other parts of ISO/IEC 14772. The identifier "utf8" indicates a clear text encoding that allows for international characters to be displayed in ISO/IEC 14772 using the UTF-8 encoding defined in ISO/IEC 10646-1 (otherwise known as Unicode); see 2.'''['''UTF8''']'''. 

]FIG]


[189] [CITE[VRML97, ISO/IEC 14772-1:1997 -- 4 Concepts]]
([TIME[2014-01-31 07:20:50 +09:00]])
<https://www.web3d.org/documents/specifications/14772/V2.0/part1/concepts.html#4.3>

[FIG(quote)[
[FIGCAPTION[
[190] [CITE@en[RFC 8030 - Generic Event Delivery Using HTTP Push]]
([TIME[2020-03-09 00:13:33 +09:00]])
<https://tools.ietf.org/html/rfc8030#section-5>
]FIGCAPTION]

>    Content-Type: text/plain;charset=utf8

]FIG]



[192] [CITE@en[662822 - Incomplete page load on abnamro.nl]]
([TIME[2020-05-12 14:58:15 +09:00]])
<https://bugs.chromium.org/p/chromium/issues/detail?id=662822>

[193] [CITE[Tcl Improvement Proposals: TIP 587: Default utf-8 for source command]]
([TIME[2020-11-17T00:58:43.000Z]])
<https://core.tcl-lang.org/tips/doc/trunk/tip/587.md>

[194] [CITE@en[Should Body.formData() always strip the BOM? · Issue #650 · whatwg/fetch]]
([TIME[2021-03-06T02:54:59.000Z]])
<https://github.com/whatwg/fetch/issues/650>


[198] [CITE@en[rfc3862]]
([TIME[2021-06-11T05:09:42.000Z]])
<https://datatracker.ietf.org/doc/html/rfc3862#page-15>



[11] [CITE@en-us[Windows XP で CD-R/RW にコピーしたファイル、またはフォルダが消失する]], [TIME[2025-11-23T05:50:59.000Z]], [TIME[2007-06-22T10:16:25.974Z]] <https://web.archive.org/web/20070622101559/http://support.microsoft.com/kb/418479/ja>

[12] [CITE[パス・ファイル名に含まれていると、まずいかもしれない漢字]], [TIME[2020-08-20T23:48:44.000Z]], [TIME[2025-11-23T05:51:28.375Z]] <https://www.shtml.jp/mojibake/dangerous_code.html>

>>11 について

>
(規則性がいまいち分かりませんが、UTF-8コードがBBで終わり、UTF-16で3Bで終わっています。) 




