OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man7 / charsets.7
1 .\" Copyright (c) 1996 Eric S. Raymond <esr@thyrsus.com>
2 .\"                and Andries Brouwer <aeb@cwi.nl>
3 .\"
4 .\" This is free documentation; you can redistribute it and/or
5 .\" modify it under the terms of the GNU General Public License as
6 .\" published by the Free Software Foundation; either version 2 of
7 .\" the License, or (at your option) any later version.
8 .\"
9 .\" This is combined from many sources, including notes by aeb and
10 .\" research by esr.  Portions derive from a writeup by Roman Czyborra.
11 .\"
12 .\" Last changed by David Starner <dstarner98@aasaa.ofe.org>.
13 .\"*******************************************************************
14 .\"
15 .\" This file was generated with po4a. Translate the source file.
16 .\"
17 .\"*******************************************************************
18 .TH CHARSETS 7 2008\-06\-03 Linux "Linux Programmer's Manual"
19 .SH 名前
20 charsets \- プログラマの視点から見た文字セットと国際化
21 .SH 説明
22 Linux は国際化されたオペレーティングシステムである。
23 Linux の様々なユーティリティや、 console ドライバなどの
24 デバイスドライバは、非ラテンアルファベットなどの
25 マルチリンガル文字セット (multilingual character sets) をサポートしている。
26 これらにはラテンアルファベット文字・ギリシャ文字・
27 キリル文字・アラビア文字・ヘブライ文字などが含まれ、
28 発音区別符号 (diacritical marks)・アクセント・合字 (ligatures) なども
29 使うことができる。
30 .LP
31 このマニュアルページでは、プログラマの視点からみた異なる文字集合規格
32 (character\-set standards) と、それらを Linux にどう適合させるかというこ
33 とについて述べる。ここでは、ASCII, ISO 8859, KOI8\-R, Unicode, ISO 2022,
34 ISO 4873 の各規格について議論する。
35 ここでは実際にロケール文字セットとして使われている文字セットに注目し、
36 その他のシステムで使われている無数のものは重視しない。
37 .LP
38 glibc 2.2.3 で公式に対応しているロケールで用いられている文字セットの
39 完全なリストは以下の通り:
40 ISO\-8859\-{1,2,3,5,6,7,8,9,13,15}, CP1251, UTF\-8, EUC\-{KR,JP,TW},
41 KOI8\-{R,U}, GB2312, GB18030, GBK, BIG5, BIG5\-HKSCS, TIS\-620 (順不同)
42 (ルーマニア語は ISO\-8859\-16 に切り替わっているかもしれない)
43 .SS ASCII
44 ASCII (American Standard Code For Information Interchange) は
45 7 ビット文字集合の元となったものであり、
46 もともとは米語(American English) のためにデザインされた。
47 現在は、ECMA\-6 標準の中で説明されている。
48 .LP
49 ドイツ語、フランス語、スペイン語などに 7 ビットで対応するため、
50 ASCII のドル記号を他の通貨記号に置き換え、
51 句読点を非英語文字のものに置き換えた様々な変種が存在する。
52 これらは全て使うべきではない。
53 glibc は ASCII の完全なスーパーセットでない文字セットのロケールに
54 対応していない。
55 (これらの文字セットは ISO\-646 として知られる。
56 これは ASCII と近い関係にあり、これらの文字を置き換えることを認めている)
57 .LP
58 Linux は米国で設計されたハードウェアのために書かれたので、
59 はじめから ASCII をサポートしている。
60 .SS "ISO 8859"
61 ISO 8859 は 15 組の一連の 8 ビット文字集合である。それらは全て
62 下位 (7 ビット) に US ASCII を含み、 128 から 159 には制御文字が配置され、
63 160 から 255 には 96 個の固定幅図形文字が配置されている。
64 .LP
65 これらのうちで、もっとも重要なのは ISO 8859\-1 (Latin\-1) である。これ
66 は Linux コンソールドライバにおいてネイティブにサポートされており、
67 X11R6 においても同様にサポートされている。さらに、
68 HTML の基本文字集合である。
69 .LP
70 .\" // some distributions still have the deprecated consolechars
71 コンソールにおける、その他の 8859 文字集合のサポートは
72 (\fBsetfont\fP(8)) のようなユーザモード・ユーティリティを利用する事で可能になる。
73 このようなユーティリティを利用することにより、コンソールドライバにおけ
74 るキーボードと EGA グラフィックテーブルの割り当てを変更し、
75 "ユーザ割り当て(user mapping)"フォントテーブルを使用することができる。
76 .LP
77 以下は、それぞれの集合の簡単な説明である。
78 .TP 
79 8859\-1 (Latin\-1)
80 Latin\-1 は アルバニア語(Albanian)、カタロニア語(Catalan)、デンマーク語
81 (Danish)、オランダ語(Dutch)、英語(English)、フェロー語(Faroese)、
82 フィンランド語(Finnish)、フランス語(French)、ドイツ語(German)、
83 ガリシア語(Galician)、アイルランド語(Irish)、アイスランド語(Icelandic)、
84 イタリア語(Italian)、ノルウェー語(Norwegian)、ポルトガル語(Portuguese)、
85 スペイン語(Spanish)、スウェーデン語(Swedish)といったほとんどの
86 西ヨーロッパ言語をカバーする。
87 ドイツ語の ij やフランス語の oe の合字、および古いスタイルの
88 ,,ドイツ語\*(lq 引用符はないが、許容範囲と考えられている。
89 .TP 
90 8859\-2 (Latin\-2)
91 Latin\-2 はスラヴ語(Slavic)、クロアチア語(Croatian)、チェコ
92 語(Czech)、ドイツ語(German)、ハンガリー語(Hungarian)、ポーランド語
93 (Polish)、ルーマニア語(Rumanian)、スロヴァキア語(Slovak)、
94 スロベニア語(Slovene)といった、書き文字としてラテン文字を
95 使用する、スラブ系言語と中央ヨーロッパの言語のほとんどをサポートする。
96 .TP 
97 8859\-3 (Latin\-3)
98 Latin\-3 はエスペラント(Esperanto)、ガリシア語(Galician)、マルタ語
99 (Maltese)などの書き手の間で良く用いられる。
100 (トルコ語(Turkish)はこれの代わりに 8859\-9 で書かれるようになっている)
101 .TP 
102 8859\-4 (Latin\-4)
103 Latin\-4 はエストニア語(Estonian)、ラトビア語(Latvian)、リトアニア語
104 (Lithuanian)の文字を提供する。Latain\-4 は、
105 本質的には廃止されている(obsolate である)。
106 8859\-10 (Latin\-6) と 8859\-13 (Latin\-7) を参照のこと。
107 .TP 
108 8859\-5
109 ブルガリア語(Bulgarian)、ベラルーシ語(Byelorussian)、マケドニア語
110 (Macedonian)、ロシア語(Russian)、セルビア語(Serbian)、ウクライナ語
111 (Ukrainian) をサポートするキリル文字集合である。 ウクライナ語では
112 downstroke をつけた "ghe" という文字を "heh" と読み、
113 ghe を正しく書くには ghe に upstroke をつけなければならない。
114 この点については、下の KOI8\-R に関する議論を参照のこと。
115 .TP 
116 8859\-6
117 アラビア語(Arabic)をサポートする。8859\-6 のグリフテーブル(glyph table)
118 は文字の形態を分割した固定幅フォントである。
119 そのため、適切なディスプレイエンジンが正しい
120 initial, medial, final フォームに結合しなければならない。
121 .TP 
122 8859\-7
123 現代ギリシャ語(Modern Greek)をサポートする。
124 .TP 
125 8859\-8
126 niqud(句読点記号) のない近代ヘブライ語(Hebrew)をサポートする。
127 niqud と完全な聖書風ヘブライ語(Biblical Hebrew)はこの文字セットの対象外である。
128 Linux では、これらのためには UTF\-8 が好ましいエンコーディングである。
129 .TP 
130 8859\-9 (Latin\-5)
131 これは、Latin\-1 の変種で、アイスランド語の文字をトルコ語(Turkish)文字に
132 置き換えたものである。
133 .TP 
134 8859\-10 (Latin\-6)
135 Latin\-6 は北欧(Nordic)地域をカバーするために Latin\-4 には含まれていない
136 イヌイット語(Inuit)(グリーンランド語(Greenlandic)) と
137 サーメ語(Sami)(ラップ語(Lappish)) を加えてある。
138 RFC 1345 には、この前段階の、異なった "latin6" が載せられている。
139 スコルト・サーメ語(Skolt Sami)では、
140 さらにいくつかのアクセント記号が必要とする。
141 .TP 
142 8859\-11
143 これは拒絶された草案標準のためだけに存在する。
144 この草案標準は Linux でタイ語のために用いられる TIS\-620 と同じものである。
145 .TP 
146 8859\-12
147 この文字セットは存在しない。
148 ベトナム語がこの場所を使うように提案したが、
149 ISO 8859 が提案する(合成でない) 96 文字に収まらなかった。
150 Linux ではベトナム語を扱う場合は UTF\-8 が好ましい文字セットである。
151 .TP 
152 8859\-13 (Latin\-7)
153 バルト海諸国の言語をサポートする。
154 特に、Latin\-4 に存在しないラトビア語の文字を含む。
155 .TP 
156 8859\-14 (Latin\-8)
157 これはケルト語の文字セットであり、ゲール語(Gaelic)とウェールズ語(Welsh)に対応する。
158 この文字セットは古代アイルランド語で用いられる付点付き文字も含む。
159 .TP 
160 8859\-15 (Latin\-9)
161 これはユーロ記号と Latin\-1 に入っていないフランス語とフィンランド語の文字が
162 追加されている。
163 .TP 
164 8859\-16 (Latin\-10)
165 この文字セットは 8859\-2 で対応する多くの言語に対応し、
166 さらにルーマニア語にはより完全に対応する。
167 .SS KOI8\-R
168 KOI8\-R はロシアにおいて良く用いられる、ISO でない文字集合である。
169 下位半分は US ASCII である。上位半分は ISO 8859\-5 より幾分良く
170 デザインされたキリル文字集合である。
171 KOI8\-U は KOI8\-R を元にした共通文字セットであり、
172 ウクライナ語(Ukrainian) によりよく対応する。
173 これらのどちらも ISO\-8859 シリーズのように ISO\-2022 互換ではない。
174 .LP
175 .\" Thanks to Tomohiro KUBOTA for the following sections about
176 .\" national standards.
177 Linux での KOI8\-R のコンソールサポートは、
178 ユーザモードのユーティリティで実現されている。
179 これはキーボードの割り当てと EGA グラフィックテーブルを変更し、
180 コンソールドライバのフォントテーブルに "ユーザ割り当て" を行う。
181 .SS "JIS X 0208"
182 JIS X 0208 は日本語の国定標準文字セットである。
183 他にもいくつか日本語の国定標準文字セットはある
184 (JIS X 0201, JIS X 0212, JIS X 0213 など)が、これが最も重要である。
185 文字は 94x94 の 2 バイトマトリックスに配置される。
186 各バイトは 0x21\-0x7e の値を持つ。
187 JIS X 0208 は文字セットであり、エンコーディングではないことに注意すること。
188 これは、
189 JIS X 0208 自身はテキストデータの表現には使われない、ということである。
190 JIS X 0208 は、
191 EUC\-JP, Shift_JIS, ISO\-2022\-JP といったエンコーディングを
192 構成する部品として用いられる。
193 EUC\-JP が Linux において最も重要なエンコーディングであり、
194 US ASCII と JIS X 0208 を含んでいる。
195 EUC\-JP では、JIS X 0208 文字は 2 バイトで表現され、
196 各バイトは JIS X 0208 コードに 0x80 を加えたものである。
197 .SS "KS X 1001"
198 KS X 1001 は韓国の国定標準文字セットである。
199 JIS X 0208 と同様に、文字は 94x94 の 2 バイトマトリックスに配置される。
200 KS X 1001 は JIS X 0208 と同様に、
201 EUC\-KR, Johab, ISO\-2022\-KR といったエンコーディングの部品として用いられる。
202 EUC\-KR は Linux において最も重要なエンコーディングであり、
203 US ASCII と KS X 1001 を含んでいる。
204 KS C 5601 は KS X 1001 の古い名前である。
205 .SS "GB 2312"
206 GB 2312 は、簡体文字を表現するための中国の国定標準文字セットである。
207 JIS X 0208 と同様に、文字は 94x94 の 2 バイトマトリックスに配置され、
208 EUC\-CN に用いられる。
209 EUC\-CN は Linux において最も重要なエンコーディングであり、
210 US ASCII と GB 2312 を含んでいる。
211 EUC\-CN はしばしば GB, GB 2312, CN\-GN などと呼ばれる。
212 .SS Big5
213 Big5 は台湾で繁体文字を記述するのに一般的に使われる文字セットである。
214 (Big5 は文字セットとエンコーディングの両方である。)
215 これは US ASCII の上位集合である。
216 非 ASCII 文字は 2 バイトで表現する。
217 0xa1\-0xfe のバイトは 2 バイト文字の 1 文字目として用いる。
218 Big5 とその拡張は台湾と香港で広く用いられている。
219 これは ISO 2022 準拠ではない。
220 .SS "TIS 620"
221 TIS 620 はタイの国定標準文字セットで、US ASCII の上位集合である。
222 ISO 8859 シリーズと同様に、タイ文字は 0xa1\-0xfe に配置される。
223 TIS 620 は Linux でのみ一般的に用いられている文字セットであり、
224 また、UTF\-8 は合成文字も持っている。
225 .SS UNICODE
226 Unicode (ISO10646) は、人間が用いる全ての言語の全ての文字を、
227 明確にあらわすことを目的とした規格である。
228 Unicode の構造は各文字のエンコードに 20.1 ビットを与えている。
229 ほとんどのコンピューターは 20.1 ビットの整数を扱えないので、
230 Unicode は普通内部データとして 32 ビット整数にエンコードされ、
231 16 ビット整数の列 (UTF\-16)(ある種の珍しい文字をエンコードする場合にだけ
232 2 つの 16 ビット整数が必要となる)か、
233 8 ビットバイトの列 (UTF\-8)として扱われる。
234 Unicode についての情報は、<http://www.unicode.org> から得られる。
235 .LP
236 Linux は 8\-bit Unicode Transformation Form(UTF\-8) を用いて Unicode を
237 あらわす。 UTF\-8 は Unicode の可変長表現である。UTF\-8 は 7 ビットを
238 符号化するのに 1 バイトを、 11 ビットでは 2 バイトを、
239 16 ビットでは 3 バイトを、
240 21 ビットでは 4 バイトを、
241 26 ビットでは 5 バイトを、
242 31 ビットでは 6 バイトを用いる。
243 .LP
244 0,1,x をゼロ、1、任意のビットとすると、あるバイト 0xxxxxxx は Unicode では
245 00000000 0xxxxxxx とあらわされる。これは、ASCII の 0xxxxxxx と同じ
246 シンボルのコードである。このように、ASCII は変更なしに UTF\-8 に変換でき、
247 ASCII のみを使う場合は、コードにおいてもファイルサイズにおいても、
248 変更に関して何も気にしなくてよい。
249 .LP
250 110xxxxx というバイトは 2 バイトコードの始まりである、そして、110xxxxx
251 10yyyyyy は 00000xxx xxyyyyyy というように組み立てられる。また、
252 1110xxxx は 3 バイトコードの始まりであり、1110xxxx 10yyyyyy 10zzzzzz
253 は xxxxyyyy yyzzzzzz というように組み立てられる(UTF\-8 が 31 ビット
254 ISO 10646 コードを利用するときは、この工程は 6 バイトコードまで発展させられる)。
255 .LP
256 ISO\-8859\-1 文字セットを使うほとんどのユーザにとって、
257 この事実は、ASCII の範囲外を使った文字は
258 二つのバイトに符号化されるということを意味する。このことから
259 (UTF\-8 を使うと、ISO\-8859\-1を使用している)元々のテキストファイルのサイズから
260 1 〜 2 パーセント大きくなってしまうことになる。
261 ロシア語やギリシャ語を利用するユーザーにとっては、
262 これによって元のテキストは 2 倍の大きさになることになる。
263 なぜならこれらの言語はほとんどが ASCII の範囲外だからである。
264 現在 16\-bit コードを広く利用している日本語を利用するユーザには
265 3 バイト必要となる。
266 Unicode への変換にアルゴリズム的変換をすればよい文字セットがある
267 (特に ISO\-8859\-1)一方、一般的には変換テーブルが必要であり、
268 16 ビットコードの場合はこのテーブルはかなり大きなものとなる。
269 .LP
270 UTF\-8 は自己同期的である。10xxxxxx は終端であり、ほかのバイトはコードの
271 先頭である。UTF\-8 の文字列における ASCII のバイトは、常にその文字自身を
272 表現することに注目してほしい。特に、幾つかの大きなコードのパートを形成
273 するために、NUL (\(aq\e0\(aq) や \(aq/\(aq を埋め込む必要はない。
274 .LP
275 ASCII と NUL と \(aq/\(aq は変更されないため、カーネルは UTF\-8 を
276 使用していることを特に意識しなくても良い。
277 カーネルはバイトが何をあらわしているかに注意する必要がない。
278 .LP
279 Unicode データ列のレンダリングは典型的には Unicode のサブセットから
280 グリフへのマップである"サブフォント(subfont)"テーブルを利用して
281 行われる。カーネル内部では、Unicode を ビデオ RAM 内部にロードされた
282 サブフォントとして記述する。これは、UTF\-8 モードでは 512 の異なったシンボルを
283 持った文字集合を利用可能であることを意味する。
284 これは、日本語、中国語、韓国語では十分ではない、しかし、その他の利用では
285 十分である。
286 .LP
287 現在のところ、コンソールドライバは合成文字を扱えない。
288 従って、タイ語、スー語やその他の合成文字が必要な文章は
289 コンソールでは扱えない。
290 .SS "ISO 2022 and ISO 4873"
291 ISO 2022 と ISO 4873 標準では、
292 VT100 の動作に基づいたフォントコントロールモデルを述べられている。
293 このモデルは Linux カーネルや \fBxterm\fP(1) において(部分的に)サポートされている。
294 この標準は日本や韓国においてよく用いられる。
295 .LP
296 G0, G1, G2, G3 と呼ばれる 4 つの図形文字集合がある。
297 これらのうちのひとつは、最上位ビットが 0 であるコードのための現在の文字集合
298 (初期値は G0)、またひとつは最上位ビットが 1 であるコードのための現在の
299 文字集合(初期値は G1)である。それぞれの図形文字集合は 94 か 96 の文
300 字を持ち、基本的に 7\-bitの文字集合であり、040\-0177 (041\-0176) か
301 0240\-0377 (0241\-0376)のコードを使う。
302 G0 は常に 94 文字で 041\-0176 のコードを使用する。
303 .LP
304 文字集合の切り替えはシフトファンクション \fB^N\fP (SO または LS1),
305 \fB^O\fP (SI または LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3),
306 ESC ~ (LS1R), ESC } (LS2R), ESC | (LS3R) を使って行われる。
307 ファンクション LS\fIn\fP は最上位ビットが 0 であるコードのための文字集合を
308 G\fIn\fP に設定する。
309 ファンクション LS\fIn\fPR は最上位ビットが 1 であるコードのための文字セットを
310 G\fIn\fP に設定する。
311 ファンクション SS\fIn\fP は(最上位ビットの値にかかわらず)次の文字のみ
312 文字集合を G\fIn\fP (\fIn\fP=2 または 3)に設定する。
313 .LP
314 94 文字集合では、エスケープシーケンス ESC ( xx (G0 用), ESC ) xx (G1
315 用),  ESC * xx (G2 用), ESC + xx (G3 用) によって、G\fIn\fP 文字集合
316 を用いるように指示される。
317 xx は "ISO 2375 International Register of Coded Character Sets" で
318 決められている一文字、または二文字である。
319 たとえば ESC ( @ は ISO 646 文字集合を G0 として選び、ESC ( A
320 は(ナンバーサイン(#)の代わりに、ポンド(£)を持つ) UK スタンダード文字集合を
321 選択する。ESC ( B は(通貨記号のかわりにダラー($)を持つ) ASCIIを選択する。
322 ESC ( M は アフリカ言語(African languages) を選択し、ESC
323 ( ! A は キューバ語(Cuban)文字集合を選択する。などなど…
324 .LP
325 96\-文字集合では、エスケープシーケンス ESC
326 \- xx (G1 用), ESC . xx (G2 用), ECS / xx (G3 用)を用いることで、
327 G\fIn\fP 文字集合を使用するように指示される。
328 例えば、ESC \- G はヘブライアルファベット(Hebrew alphabet) を
329 G1 として選択する。
330 .LP
331 マルチバイト文字集合ではエスケープシーケンス E $ xx または ESC $ ( xx
332 (G0 用), ESC $ ) xx (G1 用), ESC $ * xx (G2 用), ESC$ + xx (G3 用) を
333 用いることで、 G\fIn\fP 文字集合を使用するように指示される。
334 例えば、ESC $ ( C は 韓国語(Korean)文字集合を G0 として選択する。
335 ESC $ B によって選択される日本語文字セットは、より最近のバージョンでは
336 ESC & @ ESC $ B によって選択されるようになった。
337 .LP
338 ISO 4873 はより制限された文字集合の利用を規定する、その規定で
339 は、G0 は(常に ASCIIに)固定される。従って、G1, G2, G3 は最上位ビットが
340 セットされたコードとしてのみ呼び出すことができる。
341 特に、\fB^N\fP と \fB^O\fP は用いられず、ESC ( xx は xx=B としてのみ
342 用いることができ、
343 ESC ) xx, ESC * xx, ESC + xx はそれぞれ ESC \- xx, ESC . xx, ESC / xx と
344 等価になる。
345 .SH 関連項目
346 \fBconsole\fP(4), \fBconsole_codes\fP(4), \fBconsole_ioctl\fP(4), \fBascii\fP(7),
347 \fBiso_8859\-1\fP(7), \fBunicode\fP(7), \fButf\-8\fP(7)