[1] [[Unicode]] のいくつかの[[符号位置][Unicode符号位置
]]は、
[DFN[[RUBY[非文字][ひもじ]@en[noncharacters]]]]とされています。


* 仕様書

[REFS[
- [10] [CITE[[[The Unicode Standard]], Version 13.0 - ch02.pdf]], [TIME[2020-03-09T17:53:32.000Z]], [TIME[2020-12-20T08:35:03.323Z]] <https://www.unicode.org/versions/latest/ch02.pdf#G14527>
- [75] 
[CITE[[[The Unicode Standard]], Version 13.0 - ch03.pdf]], [TIME[2020-03-09T17:53:34.000Z]], [TIME[2020-12-20T07:20:27.336Z]] 
<https://www.unicode.org/versions/latest/ch03.pdf#G22582>
- [71] [CITE[[[The Unicode Standard]], Version 13.0 - ch03.pdf]], [TIME[2020-03-09T17:53:34.000Z]], [TIME[2020-12-20T02:08:18.239Z]] <https://www.unicode.org/versions/latest/ch03.pdf#G2212>
- [38] [CITE[[[The Unicode Standard]], Version 13.0 - ch23.pdf]], [TIME[2020-03-09T17:53:52.000Z]], [TIME[2020-12-17T09:40:46.229Z]] <https://www.unicode.org/versions/latest/ch23.pdf#G12612>
]REFS]



* 意味

[72] 
[DFN[[RUBY[非文字][ひもじ][Noncharacter]]]]は、
[[符号点型]]の1つです。
[SRC[>>71 D10a]]



[13] [[非文字]]は、
内部用に恒久的に[[予約されている符号点][予約済符号点]]です。
[SRC[>>71 D14, >>38]]
字義通り単に「[[文字]]ではない」という意味では''なく''、
[[非文字]]という1つの独立した分類であって、
[[noncharacter]] と1語で表記します。
[[文字]]ではありませんが、
[[Unicode符号位置]]ではあります。
[[抽象文字]]は割当済ではありませんが、
[[未割当符号点]]とは違う[[割当済符号点]]とされます。

;;
[20] 
[[Unicode符号位置]]には、
他にも[[サロゲート]]や[[未割当符号位置]]のような[[文字]]でないものがありますが、
それらは[[非文字]]では''ありません''。
[[Unicode文字]]ではない絵や記号やその他のオブジェクトも[[非文字]]ではありません。


[44] 
[[アプリケーション]]は、
内部用に自由に[[非文字符号点]]を使えます。
[SRC[>>38, >>75 C2]]
ただ[[非文字]]のうち
[CODE[U+FFFE]]
は想定用途が設定されています (>>7)。
[CODE[U+FFFF]], [CODE[U+10FFFF]]
にも利用例が示されています (>>14)。

[15] 
[[非文字]]が[[アプリケーション]]の内部用途以外の[[情報交換]]で出現したとしても、
[CITE[The Unicode Standard]]
はそれに対して標準的な解釈は無い (意味を定義しない) としています。
[SRC[>>38]]




[49] 
[[非文字]]は、
[[アプリケーション]]内部用の[[私用文字]]的なものです。
真の[[私用文字]]は ([[私的な同意]]のもと) [[開放型]][[情報交換]]での利用が想定される割り当てられた[[文字]]であるのに対し、
[[非文字]]は[[アプリケーション]]外部での解釈を持たない恒久的に予約された[[未割当]]の[[符号位置]]である点が違います。
[SRC[>>38]]





[11] 
>
:C7 :When a process purports not to modify the interpretation of a valid coded character
sequence, it shall make no change to that coded character sequence other than the possible
replacement of character sequences by their canonical-equivalent sequences or the
deletion of noncharacter code points.
- [INS[(中略)]]
-If a noncharacter that does not have a specific internal use is unexpectedly
encountered in processing, an implementation may signal an error or delete or
ignore the noncharacter. If these options are not taken, the noncharacter
should be treated as an unassigned code point. For example, an API that
returned a character property value for a noncharacter would return the same
value as the default value for an unassigned code point.
-[INS[(後略)]]

;; [[Unicode 5.0]] 3.2 <http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#page=10> 抜粋


[12]
>
:D15 Reserved code point: Any code point of the Unicode Standard that is reserved for
future assignment. Also known as an unassigned code point.
- Surrogate code points and noncharacters are considered assigned code points,
but not assigned characters.
- [INS[(後略)]]

;; [[Unicode 5.0]] 3.4 <http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#page=18>




[9] 
> These codes are intended for process-internal uses, but are not permitted for interchange.

;; <http://www.unicode.org/charts/PDF/Unicode-4.0/U40-FB50.pdf>、
<http://www.unicode.org/charts/PDF/UFB50.pdf>「04-Apr-2008 09:52  342K」 (2009年2月現在)

* 符号点

[32] 
[[非文字]]の[[符号位置]]は、66個あります。
[SRC[>>38, >>71 D14]]

- [40] 16進下4桁が [N[0xFFFE]], [N[0xFFFF]] の 2 × 17 = 34 個の[[符号位置]]
- [41] [CODE[U+FDD0]] - [CODE[U+FDEF]] の32個の[[符号位置]]



[REFS[
- [31] [[非文字]]の[[符号位置]]の一覧
<https://chars.suikawiki.org/set/%24unicode%3ANoncharacter_Code_Point>
]REFS]

** U+FDD0〜U+FDEF

[42] 
[CODE[U+FDD0]] - [CODE[U+FDEF]]
の32個の[[符号位置]]は、
[[非文字]]です。
[SRC[>>38]]

[43] 
[[歴史的理由]]により
[[Arabic Presentation Forms-A]]
[[ブロック]]に含まれますが、
関係はありません。
[[アラビア文字]]用でも[[右横書き]]用でもなく、
他の[[非文字]]と用途は違いません。
[SRC[>>38]]

[HISTORY[

[2] 
複数の[[仕様書]]が、
「U+FDD0〜U+FD''E''F」
の32個の[[符号位置]]ではなく、誤って
「U+FDD0〜U+FD''D''F」
の16個の[[符号位置]]としていました。

[8] [[Unicode 5.1]] の Code Chart PDF にすら、
>This block also contains 32 noncharacters in the range FDD0‐FDDF.

と間違った記述が含まれていました。

[REFS[
- [54] <http://www.unicode.org/charts/PDF/UFB50.pdf>,
「04-Apr-2008 09:52  342K」,
[TIME[平成21(2009)年2月][2009-02]]現在
]REFS]

;; 
[55] 
[[Unicode 4.0]] の [[PDF]] <http://www.unicode.org/charts/PDF/Unicode-4.0/U40-FB50.pdf>
には該当部分の記述がそもそもなかったみたいです。

[5] [[XML]] は、
[TIME[2007-08-15]]の
[[XML 1.0 4e]] E02、
[[XML 1.1 2e]] E02
でこの誤りを修正しました
[SRC[>>56, >>57]]。
この修正は[[適合性]]には影響しませんでした。
([[XML 1.1]] の[[名前開始文字]]の定義は[[非文字]]を除外する形になっていましたが、
その除外領域は間違っていませんでした。)
[SEE[ [[XMLにおける文字]] ]]

[REFS[
-[56] 
[CITE@en[Errata in REC-xml-20060816]] ([TIME[2008-11-19 06:33:50 +09:00]] 版) <http://www.w3.org/XML/xml-V10-4e-errata#E02>
-[57] 
[CITE@en[Errata in REC-xml11-20060816]] ([TIME[2008-01-19 03:24:55 +09:00]] 版) <http://www.w3.org/XML/xml-V11-2e-errata#E02>
]REFS]

[3] [[HTML5]] は、
[TIME[平成21(2009)年1月][2009-01]]の改訂 r2708
でこの誤りを修正しました
[SRC[>>48]]。
[[HTML構文解析器]]の挙動 ([[文字参照]])
と
[[HTML文書]]の[[適合性]]に影響しました。

[REFS[
- [48] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-02-22 09:57:31 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=2707&to=2708&context=10>
-- 移転確認 [TIME[2020-12-18T04:56:49.900Z]]
-- [CITE@en['''['''c''']''' (0) I missed a few [[non-characters]]. Not sure how I missed these. (…]], [[Hixie]], [TIME[2009-01-24 14:07:17 +09:00]], [TIME[2020-12-18T04:56:31.000Z]] <https://github.com/whatwg/html/commit/62aba031954ecb4b3ad387d50acf7d457b13b9f6>
]REFS]

]HISTORY]

[78] 
[[Solstitium]]
は、
[[bidi]]
の制御の文字と同じように[[縦書き]]用の指示を記述するために[[非文字]]を使っています。
[SEE[ [[書字方向]] ]]



** U+FFFE

[7] 
[DFN[[CODE[U+FFFE]]]]
は、
[CODE[U+FEFF]]
と対になる[[符号位置]]です。
[CODE[U+FEFF]] [CODE(charname)@en[BOM]]
を
[[UTF-16]]
で表した時、
[[大エンディアン]]なら [N[0xFEFF]]、
[[小エンディアン]]なら [N[0xFFFE]]
となります。
[SEE[ [[BOM]] ]]
従って[[文字列]]の先頭で[[エンディアン]]の判定に利用でき、
[CODE[U+FFFE]] として出現したなら[[エンディアン]]が間違っていることがわかります。
故に[[アプリケーション]]は、
[CODE[U+FFFE]]
を[[エンディアン]]が逆であることを示す内部信号として予約する[RUBYB[べき][should]]です
[SRC[>>38]]。

[58] 
実用を考えると、
この[[符号位置]]を何らかの[[アプリケーション]]依存の用途に使うと、
逆の[[エンディアン]]の
[CODE(charname)@en[BOM]]
と解釈されてしまう可能性があるわけですから、
とても安全とはいえません。
[CODE(charname)@en[BOM]]
判定コードの条件分岐の記述以外の一切の用途に使うべきではなさそうです。


- [80] [CITE[TeX dcr input (Input required for European Computer Roman Font for TeX)]], [TIME[2025-06-16T10:36:17.000Z]], [TIME[2000-08-16T01:40:45.357Z]] <https://web.archive.org/web/20000816013913/http://www.kostis.net/charsets/tex-dcr.htm>
- [81] [CITE[TeX dcr input (Input required for European Computer Roman Font for TeX)]], [TIME[2025-06-16T10:36:31.000Z]], [TIME[2000-08-16T01:41:05.877Z]] <https://web.archive.org/web/20000816013919/http://www.kostis.net/charsets/tex-dcr.in.htm>
- [82] [CITE[TeX dcr output (Output produced for European Computer Roman Font by TeX)]], [TIME[2025-06-16T10:36:42.000Z]], [TIME[2000-08-16T01:41:17.772Z]] <https://web.archive.org/web/20000816013924/http://www.kostis.net/charsets/tex-dcr.out.htm>

[83] >>80 >>81 >>82 当時の [[Unicode]] にない文字がなぜか [CC[U+FFFE]]
で表されています。[[文字の名前]]も独自に付けられています。




** U+FFFF

[14] 
[DFN[[CODE[U+FFFF]]]]
は、
[[16ビット符号単位]]の最大値 [N[0xFFFF]]
です。
また
[CODE[U+10FFFF]]
は、
[[Unicode符号位置]]の最大値 [N[0x10FFFF]]
です。
これを使って、
例えば[[リスト]]の終端を示したり、
他のどの[[文字]]よりも大きな値として使ったりできます。
[SRC[>>38]]





* 特性

[51] 
[[私用文字]]は[[特性値][文字特性]]を [[UCD]]
に示されたままではなく、
割り当てた[[文字]]に合わせて変更することを認めています。
[SEE[ [[私用文字]] ]]
一方[[非文字]]に対しては同様の規定はありません。

[52] 
[[アプリケーション]]は任意の目的で内部的に[[非文字]]を取り扱うことを認められているのですから、
[[特性値][文字特性]]を任意の値に読み替えたとしても、
ただちに仕様違反とはならないはずです。
[[非文字]]はあくまで[[アプリケーション]]内でのみ使うことが想定されたものですから、
どう処理しようとも[[相互運用性]]には影響しないはずです。

[53] 
逆にそれが[[相互運用性]]に悪影響を及ぼす形で観測され得るとしたら、
それは[[非文字]]の用法として不適切であるとも考えられます。


[77] 
[[非文字]]の
[[General Category]]
は
[CODE[Cn]]
です
[SRC[>>10]]。
[CODE[Cn]]
には他に[[未割当符号点]]も含まれます。
[SEE[ [[Cn]] ]]


* 安定性

[73] 
[[非文字符号点]]は、
恒久的に[[非文字]]として[[予約][予約済符号点]]されています。
[SRC[>>71 D14]]

[45] 
[CITE[The Unicode Standard]]
は、
[[非文字]]の意味を定めていません。
[CITE[The Unicode Standard]]
は、
自身が[[非文字]]に[[情報交換]]可能な意味を割り当てることを、
恒久的に禁止しています。
[SRC[>>38]]

[74] 
つまり既に[[非文字]]として定義された[[符号点]]が、
[[非文字]]でなくなることはありません。


[50] 
現在の[[非文字]]は、過去の
[CITE[The Unicode Standard]]
で段階的に追加されたものでした。
ここ数年新規追加はされておらず、
近い将来に追加されそうな見込みもありませんが、
今後どうなるかは不明です。

* 文脈

[59] 
[[Unicode文字列]]は、
一般的には
[[Unicode符号位置]]の列で、
[[非文字]]が含まれる可能性もあります。

[46] 
[CITE[The Unicode Standard]]
は、
[[Unicode文字列]]には、
たとえそれが[[情報交換]]されるものだとしても、
[[非文字]]が含まれることを禁止はしないとしています。
ゆえに、
[[API]] や[[プロセス間通信]]や[[蓄積]]のような内部的な
「[[情報交換]]」
で[[非文字]]を正しく保持できるのであると説明されています。
[SRC[>>38]]
つまり[[非文字]]が利用を認められる「内部処理」
とは、
必ずしも動作中の[[プロセス]]が保持する[[メモリー]]上の[[文字列]]表現のような狭い範囲に限定されていないということです。

[39] 
[[Unicode]]
[[テキストデータ]]の[[開放型]]交換では、
[[非文字]]の利用は[[[RUBYB[推奨][recommended]]されていません][Unicodeの推奨されない文字]]。
[SRC[>>38]]
公開の情報交換では使う[RUBYB[べきではありません][should not]]
[SRC[>>75 C2]]。

[60] 
ところでこの開放型、非開放型という区別は、
[[ライブラリー]]、
[[IPC]]、
[[Web API]]
など多様な手法で作者の異なる多数の[[ソフトウェア部品]]を組み合わせて構築する現代的なアプリケーション開発技法のもとでは、
不鮮明かもしれません。
各部分で[[非文字]]がどう扱われるか、
正確に把握しながら開発する人は、そう多くはないでしょう。
いつどこでどのように扱われるかわからないとすると、
ごく限られた小さな[[関数]]内部でのみ使うような極めて限定的な用法以外は安全とはいえません。

-*-*-

[4] [[HTML]] では、
[[著者]]は[[文書]]に[[非文字]]を含めては[MUST[なりません]]。
直接の記述も[[文字参照]]としての記述もできません。
[SRC[[CITE[HTML Standard]]]]


[6] [[XML]] では、 
[CODE[U+FFFE]]、[CODE[U+FFFF]] 
を[[文書]]に含めると[[整形式]]ではなくなります。
それ以外の[[非文字]]を含めることはできますが、 
仕様書の Note で[RUBYB[[[非推奨]]]@en[discouraged]]とされています。
[SRC[>>62, >>63]]
[SEE[ [[XMLにおける文字]] ]]

[65] 
[[JavaScript]]
では[[非文字]]を扱うことができます。
[[DOM]]
に[[非文字]]を含めることもできます。
([[DOM]] として[[メモリー]]上で[[非文字]]を保持することは可能ですが、
[[HTML文書]]や[[XML文書]]として[[直列化]]すると、
[[不適合]]になります。)

[REFS[
-[62] 
[CITE@EN[Extensible Markup Language (XML) 1.0 (Fifth Edition)]] ([TIME[2008-11-21 21:41:46 +09:00]] 版) <http://www.w3.org/TR/2008/REC-xml-20081126/#charsets>
-[63] 
[CITE@en[Extensible Markup Language (XML) 1.1 (Second Edition)]] ([TIME[2006-09-30 04:02:09 +09:00]] 版) <http://www.w3.org/TR/2006/REC-xml11-20060816/#charsets>
]REFS]



* 処理

[33] [[非文字]]は処理系依存の意味を割り当てても良いことになっています。
従って内部でどのように処理されるかはまったく不明です。

[76] ただし[[処理]]は、
[[非文字符号点]]を[[抽象文字]]と解釈してはなりません。
[SRC[>>75 C2]]

[67] 
そして、
[[非文字]]が含まれる[[文字列]]を受信したとき、
その挙動はまったく不明です。
ある実装では正しく扱える[[文字列]]が他の実装では意図せぬ動作を招くおそれがあります。

[47] 
[CITE[The Unicode Standard]]
として、
[[アプリケーション]]が[[開放型]][[情報交換]]で[[非文字]]を受信した時に、
[[非文字]]をどう解釈しなければならないといった定めはありません。
しかし[[非文字]]を
[CODE[U+FFFD]]
に置き換えるなど適切な措置をとるの[RUBYB[よい慣習][good practice]]とされます。
ただし削除するだけだと[[セキュリティーの問題][文字のセキュリティー]]を起こすおそれがあります。
[SRC[>>38]]


[34] とはいえ多くの実装は[[非文字]]に特別な意味を与えておらず、
[[プロトコル]]によっては[[誤り]]として扱われたり、
[CODE(char)[[[U+FFFD]]]] に置き換えられたりする他は、
普通の未割り当ての[[符号位置]]と同じように扱われることが多いようです。

[68] 
[[アプリケーション]]が[[非文字]]に特別な意味を与えている場合は、
外部から与えられた[[非文字]]の意味がそれと一致している保証が無い限り、
[CODE[U+FFFD]]
に置き換えるか受け入れを拒絶するなど適切な措置を採らないと、
誤動作してしまいます。
ときには[[セキュリティー問題][文字のセキュリティー]]となるかもしれません。


[69] 
[[アプリケーション]]や[[ソフトウェア部品]]の中には、
[[非文字]]が与えられた時、
[[致死的エラー]]として扱うものがあります。
開発者が意図せずそのような挙動の[[ライブラリー]]を組み込んでいる場合もあります。
[[利用者]]がその挙動を完全に把握できているならいいですが (そんなことはほぼ無い)、
悪意ある第三者が[[非文字]]の入ったデータを混入させる
[[DoS攻撃]]に使うおそれがあります。



-*-*-

[61] 
[[HTML構文解析器]]は、
[[非文字]]を[[構文解析誤り]]とし、
[CODE[U+FFFD]]
に置き換えなければ[MUST[なりません]] [SRC[[CITE[HTML Standard]]]]。
[[文字参照]]も
[CODE[U+FFFD]]
に置き換えられます。


[64] 
従って[[構文解析]]直後の [[HTML DOM]] には[[非文字]]は含まれません。
ただし[[スクリプト]]で [[DOM]] を操作して[[非文字]]を挿入することはできます。
従って 
[[JavaScript]]
のコードは[[非文字]]が含まれないことを前提にはできません。

[66] 
[[XML構文解析器]]は
[CODE[U+FFFE]],
[CODE[U+FFFF]]
に遭遇したとき、
これを[[非整形式]]として扱わなければなりません。
そこで[[構文解析]]を停止し、
[[致死的エラーとして扱って][Draconian error handling]]も構いません
(そのような実装が多いです) が、
処理を継続することも認められています。
ただしその場合どのように処理されるかは定められていません。
それ以外の[[非文字]]は、
通常の[[文字]]と同じように扱わなければなりません。

[70] 
正当な[[利用者]]が意図せずに、
または悪意ある攻撃者により、
データに
[CODE[U+FFFE]]
や
[CODE[U+FFFF]]
が混入させられ、
[[XML文書]]である
[[RSSフィード]]が[[非整形式]]化される事案がままあります。
([[いけてないフィードリーダー]]はそのような[[フィード]]を扱えないのです。)

* 関連


[21] [[制御文字]]や [CODE(char)[[[U+FEFF]]]] [CODE(charname)@en[[[ZWNBSP]]]]
は[[文字]]であり、[[非文字]]ではありません。

;; [22] [CODE(charname)@en[[[BOM]]]] は[[符号化方式]]に依存した[[ビット組合せ]]であり、
[[文字]]でも[[非文字]]でも、[[符号位置]]でもありません。
([CITE[The Unicode Standard]] は[[文字]]であるかのように扱っていますが。)

[84] [[Unicodeの符号空間]] 

* 歴史

** [CODE[U+FDD0]] - [CODE[U+FDEF]]

[16] 
[CODE[U+FDD0]] - [CODE[U+FDEF]]
の
32個の[[符号位置]]は、
[[Unicode 3.1]] で[[非文字]]とされました。

- [19] [CITE@en-us[UAX #27: [[Unicode 3.1]]]] ([TIME[2002-07-25 06:19:39 +09:00]] 版) <http://www.unicode.org/reports/tr27/tr27-4.html>


** U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, ..., U+FFFFE, U+FFFFF, U+10FFFE, U+10FFFF


[17] [[Unicode 3.1]] はこれら32[[符号位置]]が [[Unicode 3.0]] で既に[[非文字]]であったとしていますが、
[[Unicode 3.0]] のどの部分でそのように規定されているのか確認できませんでした。

>There are 34 specific code points in Unicode 3.0 that are characterized as noncharacters.

;; [CITE@en-us[UAX #27: Unicode 3.1]] ([TIME[2002-07-25 06:19:39 +09:00]] 版) <http://www.unicode.org/reports/tr27/tr27-4.html>

[18] 
これら32[[符号位置]]が[[非文字]]として code charts にはじめて掲載されたのは
[[Unicode 3.1]] です。 [WEAK[(それ以前は[[サロゲート]]部分の code charts がありませんでした。)]]

;; <http://www.unicode.org/reports/tr27/tr27-4.html#charts>

[25] [[Unicode]] [[ML]] の発言 (>>26) によれば、これらが追加されたのは [[ISO/IEC 10646]]
の規定があったためであり、それが発見された時には既に遅かった、ということです。

[REFS[
- [26] [CITE[Unicode Mail List Archive: Re: plane business]] ([[Asmus Freytag (asmusf@ix.netcom.com)]] 著, [TIME[2001-10-02 04:25:46 +09:00]] 版) <http://www.unicode.org/mail-arch/unicode-ml/y2001-m10/0014.html>
]REFS]

[27] [[ISO/IEC 10646]]-1:2000 に対応する [[JIS X 0221]]-1:2001 の 7. には、
>いかなる[[面]]でも、[[符号位置]]の [CODE(char)[[[FFFE]]]] 及び [CODE(char)[[[FFFF]]]]
を使用してはならない。

... とあります。 [[ISO/IEC 10646]]-1:2000 は [[Unicode 3.0]] に相当しています。
これが [[Unicode]] でも[[非文字]]として扱わなければならなくなった根拠でしょう。

;; [28] [[ISO/IEC 10646]]-1:1993 から既にこの規定があったのかは未確認です。

[29] [CODE[FFFE]] は [[UCS-4]] [[BOM]] における誤認を防ぐためと説明できます
(ただし [[BOM]] が導入されたのと [CODE[FFFE]] が予約されたのでどちらが先かは不明)。

[30] [CODE[FFFF]] が予約されている理由は不明です。

**

[23] [CITE[unicode - What's the purpose of the noncharacters U+FDD0 to U+FDEF? - Stack Overflow]]
( ([TIME[2012-05-14 23:12:14 +09:00]] 版))
<http://stackoverflow.com/questions/5188679/whats-the-purpose-of-the-noncharacters-ufdd0-to-ufdef>

[24] [CITE@en-us[Unicode Character Encoding Stability Policy]]
( ([TIME[2012-04-04 18:25:54 +09:00]] 版))
<http://unicode.org/policies/stability_policy.html#Property_Value>

[35] [CITE@en[Define control and noncharacter]]
([[annevk]]著, [TIME[2017-04-03 15:24:58 +09:00]])
<https://github.com/whatwg/infra/commit/ad1b87aecce01759096fcdbf6acc2bd6096c3168>

[36] [CITE@en[Editorial: use noncharacter and control from Infra]]
([[annevk]]著, [TIME[2017-04-03 19:40:46 +09:00]])
<https://github.com/whatwg/html/commit/70925237a88d9802bfe7224fe9c78b146af615be>

[37] [CITE@en[Editorial: use noncharacter from Infra]]
([[annevk]]著, [TIME[2017-03-29 21:48:11 +09:00]])
<https://github.com/whatwg/url/commit/4a4c55959bec4f091373723bd0d507432d4b3dac>

[79] [CITE@en[perlunicode - Unicode support in Perl - Perldoc Browser]], [TIME[2022-11-13T12:34:50.000Z]] <https://perldoc.perl.org/perlunicode#Noncharacter-code-points>