OSDN Git Service

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