/
272.txt
139 lines (97 loc) · 7.01 KB
/
272.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
[23] [DFN[[[UTF-16]]]] は、 [[Unicode]] の[[符号化方式]]の1つです。
[32] 新たに [[UTF-16]] を使うべきではありません。かわりに、 [[UTF-8]]
を使うのが好ましいとされています。
* 仕様書
[REFS[
- [22] [CITE@en-US[Encoding Standard]] ([TIME[2014-07-11 16:52:59 +09:00]] 版) <http://encoding.spec.whatwg.org/#common-infrastructure-for-utf-16be-and-utf-16le>
- [25] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-20 22:41:10 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#a-utf-16-encoding>
- [35] [CITE@en[Fix #18: remove UTF-16 support from TextEncoder]] ([[annevk]]著, [TIME[2016-03-16 01:21:27 +09:00]]) <https://github.com/whatwg/encoding/commit/8360f775c8df145f649047c7d59c5ff733ade112>
]REFS]
[36] 既存のデータとの互換性のため、 [CITE[Encoding Standard]] [SRC[>>22]] で
[[UTF-16]] の[[復号]]が規定されています。以前 [SRC[>>35]] は[[符号化]]も規定されていましたが、
[[Web互換性]]のためには不要であるとして、削除されました。
* 名前
[21] [[Encoding Standard]] によれば、[[大エンディアン]]の [[UTF-16]]
の名前が [DFN[[[UTF-16BE]]]] であり、[[ラベル]]として [DFN[[CODE@en[[[utf-16be]]]]]]
を使って指定できます。また[[小エンディアン]]の [[UTF-16]] の名前が [DFN[[[UTF-16LE]]]]
であり、[[ラベル]]として [DFN[[CODE@en[[[utf-16le]]]]]] または
[DFN[[CODE@en[[[utf-16]]]]]] を使って指定できます。
* UTF-16 符号化
[24] [[HTML Standard]] は [CODE[[[UTF-16BE]]]], [CODE[[[UTF-16LE]]]] [DEL[, [CODE[[[utf-16]]]]]] の総称を [DFN[[RUBYB[UTF-16 符号化]@en[a UTF-16 encoding]]]]としています [SRC[>>25]]。
[HISTORY[
[20] [[RFC 3023]] は、 [[RFC 2781]] における [CODE(charset)@en[[[utf-16]]]]、
[CODE(charset)@en[[[utf-16be]]]]、[CODE(charset)@en[[[utf-16le]]]]
の総称を [DFN[[RUBYB[UTF-16 族]@en[the UTF-16 family]]]]としています [SRC[>>19]]。
]HISTORY]
* 符号化方式
= [6] [CODE(char)[[[U+D800]]]] から [CODE(char)[[[U+DFFF]]]] までは表現できません。
= [7] [CODE(char)[[[U-00110000]]]] から先は表現できません。 ([[ISO/IEC 10646]] には存在しますが、[[Unicode]] には存在しません。)
= [8] それ以外で [CODE(char)[[[U+0000]]]] から [CODE(char)[[[U+FFFF]]]] であるなら、その[[符号位置]]と同じ値の[[16ビット符号単位]]によって表現します。
= [9] それ以外なら、つまり [CODE(char)[[[U+10000]]]] から [CODE(char)[[[U+10FFFF]]]] であるなら、
== [10] [VAR[U']] を[[符号位置]]から 0x10000 引いた値とします。この結果の値は20ビット非負整数です。
== [11] [VAR[W1]] を [VAR[U']] の上位10ビットと 0xD800 の[[論理和]]とします。
== [12] [VAR[W2]] を [VAR[U']] の下位10ビットと 0xDC00 の[[論理和]]とします。
== [13] 当該[[符号位置]]は [VAR[W1]] [VAR[W2]] の2つの[[16ビット符号単位]]の列によって表現します。
[14] >>9 を図示すると、次のようになります。
- [VAR[U']] = 0b[VAR[yyyyyyyyyy]][VAR[xxxxxxxxxx]]
- [VAR[W1]] = 0b110110[VAR[yyyyyyyyyy]]
- [VAR[W2]] = 0b110111[VAR[xxxxxxxxxx]]
* BOM
[26] [[UTF-16]] および派生[[文字コード]]での [[BOM]] の取り扱いについては、
[[BOM]] の項を参照してください。
* Web における UTF-16
[29] [[Web]] の[[文字コード]]は [[UTF-8]] であり、 [[UTF-16]] は使うべきではないとされています。
[30] ただし [[JavaScript]] や [[DOM]] は、歴史的理由により、[[文字列]]の表現に
[[UTF-16]] による[[16ビット符号単位]]を使っています。
* XML における UTF-16
[27] [[XML]] には [[UTF-16]] に関する特別な規定がいくつもあります。
詳しくは [[XMLにおける文字コード]]を参照してください。
* 歴史
[37] [[UTF-16]] は、 [[UCS-2]] の16ビット平面ではすべての[[文字]]の[[符号化]]に十分でないことが明確になったとして[[サロゲートペア]]が導入されたことにより登場しました。
** ISO/IEC 10646 における UTF-16
[1]
UTF-16 は、 [[ISO/IEC 10646]] の附属書 C で規定されている [[UCS]] の[[符号化表現]]の一つです。
[2]
[[送信装置]]は、[[受信装置]]が [[UCS-2]] しか解釈できない場合でも UTF-16 を送って構いません。 (C.7 参照。)
[3]
C.7 は、 UTF-16/UCS-2 の実装を次のように分類しています。
(00 群 01 面以降を表す[[区点要素]]対の表示方法)
, ,記号 ,知らない文字 ,知っている文字
,UCS-2の実装 ,U ,〓〓 ,−
,弱い実装 ,W ,〓〓 ,α
,中程度の強さの実装 ,A ,〓 ,α
,強い実装 ,S ,〓 ,α
([SAMP(char)[α]]が 00 群 01 面以降にある知っている文字、 [SAMP(char)[〓]]は知らない文字の代替表現とする。)
[4]
>>3 W の実装ってあるのだろうか?
[5] 中程度の強さの実装と強い実装の違いはなんだ?
** RFC
[15] [CITE@en[RFC 2781 - UTF-16, an encoding of ISO 10646]]
( ([TIME[2011-02-03 23:57:14 +09:00]] 版))
<http://tools.ietf.org/html/rfc2781>
[19] [CITE@en[RFC 3023 - XML Media Types]] ([TIME[2014-07-11 12:46:44 +09:00]] 版) <http://tools.ietf.org/html/rfc3023#section-2>
** Encoding Standard
[16] [CITE@en[Web Applications 1.0 r6498 Clean up how we refer to UTF-16.]]
( ([TIME[2011-08-18 07:28:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6497&to=6498>
[17] [CITE[IRC logs: freenode / #whatwg / 20111226]]
( ([TIME[2011-12-27 08:38:44 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20111226#l-109>
[18] [CITE[''''''[''''''whatwg'''''']'''''' '''['''encoding''']''' utf-16]]
( ([TIME[2011-12-28 00:21:19 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-December/034260.html>
[28] [CITE@en[Describe the security situation around encodings and require browsers to... · 2e43ead · whatwg/encoding]]
( ([TIME[2014-12-07 20:14:32 +09:00]] 版))
<https://github.com/whatwg/encoding/commit/2e43ead5c796e314cd3aaada10a2dc33de7bfaf1#diff-8d4d847e6257b75f4bf8030496281de4R2632>
[31] [CITE@en[24120 – The Encoding Standard only recognizes utf-16le and utf-16be. This should just refer to those if this is needed at all.]]
([TIME[2015-09-03 14:37:32 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=24120#c6>
[33] [CITE@en[Update integration with Encoding Standard · whatwg/html@6a31c26]]
([TIME[2016-02-14 18:36:40 +09:00]] 版)
<https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39>
[34] [CITE@en[Fix #18: remove UTF-16 support from TextEncoder · whatwg/encoding@8360f77]]
([TIME[2016-03-19 14:08:21 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/8360f775c8df145f649047c7d59c5ff733ade112>
[38] [CITE@en[Editorial: check non-null before null]]
([[annevk]]著, [TIME[2017-05-05 21:01:38 +09:00]])
<https://github.com/whatwg/encoding/commit/4e53e160b9e0ade6e33a25d21580106a0db2c47f>