/
289.txt
193 lines (146 loc) · 7.98 KB
/
289.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
[7] [DFN[[RUBYB[[[文字符号化]]]@en[character encoding]]]]は、
[[文字]]を[[符号化]]する一連の規則の集合です。
「[[文字コード]]」と同じように曖昧に使われていますが、
「[[文字コード]]」とは違って単一の[[文字]]の[[符号化]]を指すことはあまりなく、
[[符号化]]の方式全体を指しているようです。
* 仕様書
[REFS[
- [14] [CITE@en-US[Encoding Standard]] ([TIME[2016-04-27 20:46:26 +09:00]] 版) <https://encoding.spec.whatwg.org/>
-- [15] [CITE@en-US[Encoding Standard]] ([TIME[2016-07-29 16:12:31 +09:00]]) <https://encoding.spec.whatwg.org/#encodings>
]REFS]
* 意味
[16] [DFN[[RUBYB[符号化]@en[encoding]]]]は、
[[スカラー値][Unicodeスカラー値]]の[[列]]から[[バイト列]]へ
(やその逆方向) の[[写像]]を定義するものです [SRC[>>15]]。
* 特性
[8] [[文字符号化]]は、次のような[[特性]]を持ちます。
[FIG(members list)[
: [F[名前][符号化名]] : [[Encoding Standard]] において[[符号化][文字符号化]]を識別する文字列です。
[[符号化][文字符号化]]は、[F[名前]]を1つ持ちます [SRC[>>15]]。
: [F[[[ラベル][符号化ラベル]]群]] : [[Encoding Standard]] において[[符号化][文字符号化]]に紐付けられた文字列群です。
[[符号化][文字符号化]]は、[[ラベル][符号化ラベル]]を1つ[[以上]]持ちます [SRC[>>15]]。
: [F[[[符号化器]]クラス]] :
: [F[[[復号器]]クラス]] :
]FIG]
[9] [[文字符号化]]には次のような分類があります。
[FIG(list short)[
- [[ASCII互換文字符号化]]
- [[レガシー符号化]]
- [[UTF-16符号化]]
]FIG]
** 単一バイト符号化
[18] [CITE[Encoding Standard]] の規定する[[符号化][文字符号化]]の多数は、
[DFN[[RUBYB[単一バイト符号化]@en[single-byte encoding]]]]です。[[単一バイト符号化]]においては、
[[ASCIIバイト]]と[[ASCII文字]]に対応関係があり、
[[非ASCIIバイト]]に[[非ASCII文字]]が割り当てられています。
[22] [[非ASCIIバイト]]と[[非ASCII文字]]の対応関係は、
[CITE[Encoding Standard]] で変換表が定義されています。
[19] [[非ASCIIバイト]]のいくつかにはどの[[Unicode符号位置]]も割り当てられていない場合があります。
そのような[[バイト]]が現れたら、[[複合器]]は[[誤りモード]]に従い
[CODE[U+FFFD]] と解釈するか、[[誤り]]を返します。
[20] 当然ながら、 [[Unicode符号位置]]の大多数は[[単一バイト符号化]]で表現できません。
そのような[[符号位置]]が現れたら、[[符号位置]]は[[誤りモード]]に従い[[文字参照]]を出力するか、
[[誤り]]を返します。[[文字参照]]はすべて[[ASCII文字]]で表せます。
[23] [[ISO-8859-8'''-I''']] と [[ISO-8859-8]] は同じものですが、
[[レンダリング]]で違って処理されることになっています。
[CITE[Encoding Standard]] では [[ISO-8859-8-I]] 専用の変換表がなく、
[[ISO-8859-8-I]] のものを使うことになっています。
[21] [[x-user-defined]] は、構造上は[[単一バイト符号化]]ですが、
[CITE[Encoding Standard]] では変換表ではなく[[アルゴリズム]]的に変換する別種の[[符号化][文字符号化]]として扱っています。
[FIG(short list)[ [24] [[単一バイト符号化]]の一覧
- [[IBM866]]
- [[ISO-8859-2]]
- [[ISO-8859-3]]
- [[ISO-8859-4]]
- [[ISO-8859-5]]
- [[ISO-8859-6]]
- [[ISO-8859-7]]
- [[ISO-8859-8]]
- [[ISO-8859-8-I]]
- [[ISO-8859-10]]
- [[ISO-8859-13]]
- [[ISO-8859-14]]
- [[ISO-8859-15]]
- [[ISO-8859-16]]
- [[KOI8-R]]
- [[KOI8-U]]
- [[macintosh]]
- [[windows-874]]
- [[windows-1250]]
- [[windows-1251]]
- [[windows-1252]]
- [[windows-1253]]
- [[windows-1254]]
- [[windows-1255]]
- [[windows-1256]]
- [[windows-1257]]
- [[windows-1258]]
- [[x-mac-cyrillic]]
- [[x-user-defined]]
]FIG]
** 複数バイト符号化
[27] [[ISO-2022-JP]] 以外の複数バイトの[[符号化][文字符号化]]は、
[[スカラー値列]]を[[符号化]]したものと、
その[[スカラー値列]]を任意の[[スカラー値列]]の[[リスト]]に分割し、
それぞれを[[符号化]]してから連結したものが等しくなるという性質があります。
;; [29] ですから、 [[ISO-2022-JP]] 以外は、[[符号化器]]内の状態を保持せずとも、
[[文字]]の[[ストリーム]]を読み込みながら[[符号化]]した[[バイト]]を[[ストリーム]]に書き込んでいくことができます。
[30] 複数バイトの[[符号化][文字符号化]]は、
[[バイト列]]を[[復号]]したものと、
その[[バイト列]]を任意の位置で分割してから[[復号]]して連結したものが等しいとは限りません
(等しくならない場合が多いです)。
[FIG(table)[ [28] 複数バイト符号化の一覧
:n: [[名前][符号化名]]
:ds: [[復号器]]の状態
:n: [[UTF-8]]
:ds: [[符号位置]] (21ビット整数)、状態 (数ビット)
:n: [[GBK]]
:ds: 先導バイト ([[8ビット整数]])、第2バイト ([[8ビット整数]])、第3バイト ([[8ビット整数]])
:n: [[gb18030]]
:ds: 先導バイト ([[8ビット整数]])、第2バイト ([[8ビット整数]])、第3バイト ([[8ビット整数]])
:n: [[Big5]]
:ds: 先導バイト ([[8ビット整数]])
:n: [[EUC-JP]]
:ds: 先導バイト ([[8ビット整数]])、第2バイト ([[8ビット整数]])
:n: [[ISO-2022-JP]]
:ds: 先導バイト ([[8ビット整数]])、状態 (数ビット分)
:n: [[Shift_JIS]]
:ds: 先導バイト ([[8ビット整数]])
:n: [[EUC-KR]]
:ds: 先導バイト ([[8ビット整数]])
:n: [[UTF-16BE]]
:ds: 先導バイト ([[8ビット整数]]か [CODE[null]])、先導サロゲート ([[16ビット整数]]か [CODE[null]])
:n: [[UTF-16LE]]
:ds: 先導バイト ([[8ビット整数]]か [CODE[null]])、先導サロゲート ([[16ビット整数]]か [CODE[null]])
]FIG]
** 特別な符号化
[11] いくつかの[[符号化][文字符号化]]は、[[ラベル][符号化ラベル]]が指定されても他の[[符号化][文字符号化]]と読み替えるとの特別な扱いが規定されています。
;; [[符号化の取得]]を参照。
[HISTORY[
[26] [[符号化][文字符号化]]の[[名前][符号化名]]は、
[[ラベル][符号化ラベル]]の1つになっています。
かつては [[replacement]] だけは、 [[replacement]]
という[[ラベル][符号化ラベル]]が存在していませんでした。
]HISTORY]
* 演算
[31] [[符号化を取得]]により、[[符号化ラベル]]から[[文字符号化]]を得ることができます。
[17] [[符号化器]]、[[復号器]]も参照。
* 他の定義
[5] [[RFC 7303]] では、特定の [[XML MIME実体]]で実際に用いられている [[MIME charset]]
のことを[DFN[[RUBYB[[[文字符号化]]]@en[character encoding]]]]
(文脈で明確な場合は[DFN[[RUBYB[[[符号化]]]@en[encoding]]]]) と呼んでいます [SRC[>>4]]。
;; [6] [CODE(MIME)@en[[[charset]]]] [[引数]]や [CODE(XMLa)@en[[[encoding]]]]
[[擬似属性]]に指定されている値ではなく、実際に[[符号化]]に用いられているものを指しています。
[REFS[
- [4] [CITE@en[RFC 7303 - XML Media Types]] ([TIME[2014-07-07 20:56:43 +09:00]] 版) <http://tools.ietf.org/html/rfc7303#section-2.2>
]REFS]
* 歴史
[1] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-10-24 10:48:55 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4306&to=4307>
[2] [CITE@en[Character Model for the World Wide Web 1.0: Fundamentals]]
( ([TIME[2005-02-15 14:24:00 +09:00]] 版))
<http://www.w3.org/TR/charmod/#def-CES>
[3] [CITE[Core:Character Encodings]]
( ([TIME[2014-07-22 10:45:59 +09:00]] 版))
<http://alcme.oclc.org/openurl/servlet/OAIHandler?verb=ListRecords&metadataPrefix=oai_dc&set=Core:Character+Encodings>