OSDN Git Service

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