/
309.txt
559 lines (427 loc) · 21.2 KB
/
309.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
[1] [[Unicode]] のいくつかの[[符号位置][Unicode符号位置
]]は、
[DFN[[RUBY[非文字][ひもじ]@en[noncharacters]]]]とされています。
* 仕様書
[REFS[
- [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]]
ただ[[非文字]]のうち
[CODE[U+FFFE]]
は想定用途が設定されています (>>7)。
[CODE[U+FFFF]], [CODE[U+10FFFF]]
にも利用例が示されています (>>14)。
[15]
[[非文字]]が[[アプリケーション]]の内部用途以外の[[情報交換]]で出現したとしても、
[CITE[The Unicode Standard]]
はそれに対して標準的な解釈は無い (意味を定義しない) としています。
[SRC[>>38]]
[49]
[[非文字]]は、
[[アプリケーション]]内部用の[[私用文字]]的なものです。
真の[[私用文字]]は ([[私的な同意]]のもと) [[開放型]][[情報交換]]での利用が想定される割り当てられた[[文字]]であるのに対し、
[[非文字]]は[[アプリケーション]]外部での解釈を持たない恒久的に予約された[[未割当]]の[[符号位置]]である点が違います。
[SRC[>>38]]
[10]
>
:C2:A process shall not interpret a noncharacter code point as an abstract character.
-The noncharacter code points may be used internally, such as for sentinel values
or delimiters, but should not be exchanged publicly.
;; [[Unicode 5.0]] 3.2 <http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#page=8>
[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]
** 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]]
判定コードの条件分岐の記述以外の一切の用途に使うべきではなさそうです。
** U+FFFF
[14]
[DFN[[CODE[U+FFFF]]]]
は、
[[16ビット符号単位]]の最大値 [N[0xFFFF]]
です。
また
[CODE[U+10FFFF]]
は、
[[Unicode符号位置]]の最大値 [N[0x10FFFF]]
です。
これを使って、
例えば[[リスト]]の終端を示したり、
他のどの[[文字]]よりも大きな値として使ったりできます。
[SRC[>>38]]
* 特性
[51]
[[私用文字]]は[[特性値][文字特性]]を [[UCD]]
に示されたままではなく、
割り当てた[[文字]]に合わせて変更することを認めています。
[SEE[ [[私用文字]] ]]
一方[[非文字]]に対しては同様の規定はありません。
[52]
[[アプリケーション]]は任意の目的で内部的に[[非文字]]を取り扱うことを認められているのですから、
[[特性値][文字特性]]を任意の値に読み替えたとしても、
ただちに仕様違反とはならないはずです。
[[非文字]]はあくまで[[アプリケーション]]内でのみ使うことが想定されたものですから、
どう処理しようとも[[相互運用性]]には影響しないはずです。
[53]
逆にそれが[[相互運用性]]に悪影響を及ぼす形で観測され得るとしたら、
それは[[非文字]]の用法として不適切であるとも考えられます。
* 安定性
[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]]
[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] [[非文字]]は処理系依存の意味を割り当てても良いことになっています。
従って内部でどのように処理されるかはまったく不明です。
[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]] は[[文字]]であるかのように扱っていますが。)
* 歴史
** [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>