/
272.txt
108 lines (75 loc) · 5.22 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
[23] [DFN[[[UTF-16]]]] は、 [[Unicode]] の[[符号化方式]]の1つです。
* 仕様書
[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>
]REFS]
* 名前
[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]]]],
[CODE[[[utf-16]]]] の総称を [DFN[[RUBYB[UTF-16 符号化]@en[a UTF-16 encoding]]]]としています [SRC[>>25]]。
[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]]。
* 符号化方式
= [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]]
* 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] 中程度の強さの実装と強い実装の違いはなんだ?
* 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における文字コード]]を参照してください。
* 歴史
[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>
[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>