OSDN Git Service

LDP: Update draft based on the previous commit
[linuxjm/jm.git] / manual / LDP_man-pages / 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 .\" Changes also by David Starner <dstarner98@aasaa.ofe.org>.
15 .\"
16 .\"*******************************************************************
17 .\"
18 .\" This file was generated with po4a. Translate the source file.
19 .\"
20 .\"*******************************************************************
21 .\"
22 .\" Japanese Version Copyright (c) 1996,1997,1998
23 .\"         ISHIKAWA Mutsumi, all rights reserved.
24 .\" Translated Mon Jul 21 03:46:21 JST 1997
25 .\"         by ISHIKAWA Mutsumi <ishikawa@linux.or.jp>
26 .\" Updated Fri Dec  3 JST 1999 by Kentaro Shirakata <argrath@ub32.org>
27 .\" Updated Fri Jan  4 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
28 .\"
29 .TH CHARSETS 7 2020\-08\-13 Linux "Linux Programmer's Manual"
30 .SH 名前
31 charsets \- 文字集合の標準と国際化
32 .SH 説明
33 このマニュアルページでは、 様々な文字集合標準の概要と、 Unicode が広く使われるようになる前にこれらの文字集合が Linux
34 でどのように使われていたかを説明する。 この情報の中には、以前からあるシステムやドキュメントを扱う人々にとっては今も役立つことだろう。
35 .PP
36 ここで扱う標準としては ASCII, GB 2312, ISO 8859, JIS, KOI8\-R, KS, Unicode がある。
37 .PP
38 主な対象はロケール文字集合で実際に使用されていた文字集合についてであり、他のシステムで作成されたデータで使われていた無数の他の文字集合についてではない。
39 .SS ASCII
40 ASCII (American Standard Code For Information Interchange) は
41 7 ビット文字集合の元となったものであり、 もともとは米語 (American English) のためにデザインされた。 US\-ASCII
42 とも呼ばれる。 現在は、ISO 646:1991 IRV (International Reference Version) 標準で説明されている。
43 .PP
44 ドイツ語、フランス語、スペイン語などに 7 ビットで対応するため、 ASCII のドル記号を他の通貨記号に置き換え、
45 句読点を非英語文字のものに置き換えた様々な変種が登場した。 これらはすべて非推奨である。 glibc は ASCII
46 の完全なスーパーセットでない文字セットのロケールに対応していない。
47 .PP
48 UTF\-8 を使う場合、Unicode は ASCII と互換性があるので、 通常の ASCII テキストは新しい UTF\-8
49 を使ったシステムでもそのまま正しく表示することができる。
50 .SS "ISO 8859"
51 ISO 8859 は 15 組の一連の 8 ビット文字集合である。どの文字集合も
52 下位 (7 ビット) に ASCII を含み、 128 から 159 には制御文字が配置され、
53 160 から 255 には 96 個の固定幅図形文字が配置されている。
54 .PP
55 これらのうち、最も重要なのは ISO 8859\-1 ("Latin Alphabet No .1" / Latin\-1) である。 ISO 8859\-1
56 は広く採用され、様々なシステムでサポートされていたが、 徐々に Unicode で置き換えれている。 ISO 8859\-1 文字集合は Unicode
57 の最初の 256 文字でもある。
58 .PP
59 コンソールにおける、その他の 8859 文字集合のサポートは
60 (\fBsetfont\fP(8)) のようなユーザーモードユーティリティを利用する事で可能になる。
61 このようなユーティリティを利用することにより、コンソールドライバにおけ
62 るキーボードと EGA グラフィックテーブルの割り当てを変更し、
63 "ユーザー割り当て(user mapping)"フォントテーブルを使用することができる。
64 .PP
65 以下は、それぞれの集合の簡単な説明である。
66 .TP 
67 8859\-1 (Latin\-1)
68 Latin\-1 は アルバニア語 (Albanian)、バスク語 (Basque)、デンマーク語 (Danish)、英語 (English)、フェロー語
69 (Faroese)、ガリシア語 (Galician)、アイスランド語 (Icelandic)、アイルランド語 (Irish)、イタリア語
70 (Italian)、ノルウェー語 (Norwegian)、ポルトガル語 (Portuguese)、スペイン語 (Spanish)、スウェーデン語
71 (Swedish) といった多くの西ヨーロッパ言語をカバーする。 オランダ語の IJ/ij やフランス語の œ といった合字や古いスタイルの
72 „German“ 引用符が欠けている点は以前は許容範囲と考えられていた。
73 .TP 
74 8859\-2 (Latin\-2)
75 Latin\-2 は、ボスニア語 (Bosnian)、クロアチア語 (Croatian)、チェコ語 (Czech)、ドイツ語
76 (German)、ハンガリー語 (Hungarian)、ポーランド語 (Polish)、スロヴァキア語 (Slovak)、スロベニア語
77 (Slovene) といった、 ラテン文字を書き文字として使用する多くの中央、東ヨーロッパの言語をサポートする。 以前は、ルーマニア語の ș/ț を
78 ş/ţ で置き換えるのは許容範囲と考えられていた。
79 .TP 
80 8859\-3 (Latin\-3)
81 Latin\-3 は、エスペラント語 (Esperanto)、マルタ語 (Maltese)、トルコ語 (Turkish) に対応するために設計されたが、
82 トルコ語に関しては後に 8859\-9 に取って代わられた。
83 .TP 
84 8859\-4 (Latin\-4)
85 Latin\-4 は、エストニア語 (Estonian)、ラトビア語 (Latvian)、リトアニア語 (Lithuanian)
86 といった北ヨーロッパの言語の文字を提供していたが、 8859\-10 と 8859\-13 に取って代わられた。
87 .TP 
88 8859\-5
89 ブルガリア語 (Bulgarian)、ベラルーシ語 (Byelorussian)、マケドニア語 (Macedonian)、ロシア語
90 (Russian)、セルビア語 (Serbian) をサポートし、 ウクライナ語 (Ukrainian) を (ほぼ完全に)
91 サポートするキリル文字集合である。 この文字集合が広く使われたことはなかった。 下の KOI8\-R/KOI8\-U に関する議論を参照のこと。
92 .TP 
93 8859\-6
94 アラビア語 (Arabic) をサポートするために作成された。 8859\-6 のグリフテーブル (glyph table)
95 は文字の形態を分割した固定幅フォントである。 そのため、適切なディスプレイエンジンと組み合わせ、 正しい initial, medial, final
96 フォームに結合しなければならない。
97 .TP 
98 8859\-7
99 現代ギリシャ語用として 1987 年に作成され、 2003 年に更新された。
100 .TP 
101 8859\-8
102 niqud (句読点記号) のない現代ヘブライ語 (Hebrew) をサポートする。 niqud と完全な聖書風ヘブライ語 (Biblical
103 Hebrew) はこの文字セットの対象外である。
104 .TP 
105 8859\-9 (Latin\-5)
106 これは、Latin\-1 の変種で、アイスランド語の文字をトルコ語(Turkish)文字に
107 置き換えたものである。
108 .TP 
109 8859\-10 (Latin\-6)
110 Latin\-6 は、 北欧 (Nordic) 地域を完全にカバーするために Latin\-4 には含まれていないイヌイット語 (Inuit)
111 (グリーンランド語 (Greenlandic)) と サーメ語 (Sami) (ラップ語 (Lappish)) を追加していた。
112 .TP 
113 8859\-11
114 タイ語のアルファベットをサポートし、 TIS\-620 標準とほとんど同一である。
115 .TP 
116 8859\-12
117 この文字集合は存在しない。
118 .TP 
119 8859\-13 (Latin\-7)
120 バルト海諸国の言語をサポートする。
121 特に、Latin\-4 に存在しないラトビア語の文字を含む。
122 .TP 
123 8859\-14 (Latin\-8)
124 これは、 ケルト語の文字セットであり、古代アイルランド語 (Old Irish)、マン島語 (Manx)、ゲール語 (Gaelic)、ウェールズ語
125 (Welsh)、コーンウォール語 (Cornish)、ブルターニュ語 (Breton) に対応する。
126 .TP 
127 8859\-15 (Latin\-9)
128 Latin\-9 は、広く使用されている Latin\-1 に似ているが、 いくつかのあまり使用されないシンボルを、 ユーロ記号と Latin\-1
129 に入っていないフランス語とフィンランド語の文字に置き換えている。
130 .TP 
131 8859\-16 (Latin\-10)
132 この文字セットは多くの東南ヨーロッパの言語に対応しており、もっとも重要なのはルーマニア語にはより完全に対応している点である。
133 .SS "KOI8\-R / KOI8\-U"
134 KOI8\-R は、 Unicode の前に、ロシアにおいてよく用いられた ISO でない文字集合である。 下位半分は ASCII である。上位半分は
135 ISO 8859\-5 よりいくらかよく設計されたキリル文字集合である。 KOI8\-U は KOI8\-R を元にしており、 ウクライナ語
136 (Ukrainian) への対応がより良いものになっている。 これらの文字集合はどちらも、 ISO 8859 系列とは違い、 ISO\-2022
137 との互換性はない。
138 .PP
139 Linux での KOI8\-R のコンソールサポートは、
140 ユーザーモードのユーティリティで実現されている。
141 これはキーボードの割り当てと EGA グラフィックテーブルを変更し、
142 コンソールドライバのフォントテーブルに "ユーザー割り当て" を行う。
143 .SS "GB 2312"
144 GB 2312 は、簡体文字を表現するための中国の国定標準文字セットである。 JIS X 0208 と同様に、文字は 94x94 の 2
145 バイトマトリックスに配置され、 EUC\-CN に用いられる。 EUC\-CN は Linux において最も重要なエンコーディングであり、 ASCII と
146 GB 2312 を含んでいる。 EUC\-CN はしばしば GB, GB 2312, CN\-GN などと呼ばれる。
147 .SS Big5
148 .\" Thanks to Tomohiro KUBOTA for the following sections about
149 .\" national standards.
150 Big5 は台湾で繁体文字を記述するのに一般的に使われる文字セットであった。 (Big5 は文字セットとエンコーディングの両方である。) これは US
151 ASCII の上位集合である。 非 ASCII 文字は 2 バイトで表現する。 0xa1\(en0xfe のバイトは 2 バイト文字の 1
152 文字目として用いる。 Big5 とその拡張は台湾と香港で広く用いられていた。 これは ISO 2022 準拠ではない。
153 .SS "JIS X 0208"
154 JIS X 0208 は日本語の国定標準文字セットである。 他にもいくつか日本語の国定標準文字セットはある (JIS X 0201, JIS X
155 0212, JIS X 0213 など) が、これが最も重要である。 文字は 94x94 の 2 バイトマトリックスに配置される。 各バイトは
156 0x21\(en0x7e の値を持つ。 JIS X 0208 は文字セットであり、エンコーディングではないことに注意すること。 これは、 JIS X
157 0208 自身はテキストデータの表現には使われない、ということである。 JIS X 0208 は、 EUC\-JP, Shift_JIS,
158 ISO\-2022\-JP といったエンコーディングを構成する部品として用いられる。 EUC\-JP が Linux
159 において最も重要なエンコーディングであり、 ASCII と JIS X 0208 を含んでいる。 EUC\-JP では、JIS X 0208 文字は 2
160 バイトで表現され、 各バイトは JIS X 0208 コードに 0x80 を加えたものである。
161 .SS "KS X 1001"
162 KS X 1001 は韓国の国定標準文字セットである。 JIS X 0208 と同様に、文字は 94x94 の 2 バイトマトリックスに配置される。
163 KS X 1001 は JIS X 0208 と同様に、 EUC\-KR, Johab, ISO\-2022\-KR
164 といったエンコーディングの部品として用いられる。 EUC\-KR は Linux において最も重要なエンコーディングであり、 ASCII と KS X
165 1001 を含んでいる。 KS C 5601 は KS X 1001 の古い名前である。
166 .SS "ISO 2022 and ISO 4873"
167 ISO 2022 と ISO 4873 標準では、 VT100 の動作に基づいたフォントコントロールモデルが規定されている。 このモデルは Linux
168 カーネルや \fBxterm\fP(1) において (部分的に) サポートされている。 日本語向けなど、ISO\-2022
169 をベースにした文字符号化がいくつか定義されてきた。
170 .PP
171 G0, G1, G2, G3 と呼ばれる 4 つの図形文字集合がある。
172 これらのうちのひとつは、最上位ビットが 0 であるコードのための現在の文字集合
173 (初期値は G0)、またひとつは最上位ビットが 1 であるコードのための現在の
174 文字集合(初期値は G1)である。それぞれの図形文字集合は 94 か 96 の文
175 字を持ち、基本的に 7\-bitの文字集合であり、040\(en0177 (041\(en0176) か
176 0240\(en0377 (0241\(en0376)のコードを使う。
177 G0 は常に 94 文字で 041\(en0176 のコードを使用する。
178 .PP
179 文字集合の切り替えはシフトファンクション \fB\(haN\fP (SO または LS1),
180 \fB\(haO\fP (SI または LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3),
181 ESC \(ti (LS1R), ESC } (LS2R), ESC | (LS3R) を使って行われる。
182 ファンクション LS\fIn\fP は最上位ビットが 0 であるコードのための文字集合を
183 G\fIn\fP に設定する。
184 ファンクション LS\fIn\fPR は最上位ビットが 1 であるコードのための文字セットを
185 G\fIn\fP に設定する。
186 ファンクション SS\fIn\fP は(最上位ビットの値にかかわらず)次の文字のみ
187 文字集合を G\fIn\fP (\fIn\fP=2 または 3)に設定する。
188 .PP
189 94 文字集合では、エスケープシーケンス ESC ( xx (G0 用), ESC ) xx (G1
190 用),  ESC * xx (G2 用), ESC + xx (G3 用) によって、G\fIn\fP 文字集合
191 を用いるように指示される。
192 xx は "ISO 2375 International Register of Coded Character Sets" で
193 決められている一文字、または二文字である。
194 たとえば ESC ( @ は ISO 646 文字集合を G0 として選び、ESC ( A
195 は(ナンバーサイン(#)の代わりに、ポンド(£)を持つ) UK スタンダード文字集合を
196 選択する。ESC ( B は(通貨記号のかわりにダラー($)を持つ) ASCIIを選択する。
197 ESC ( M は アフリカ言語(African languages) を選択し、ESC
198 ( ! A は キューバ語(Cuban)文字集合を選択する。などなど…
199 .PP
200 96\-文字集合では、エスケープシーケンス ESC
201 \- xx (G1 用), ESC . xx (G2 用), ECS / xx (G3 用)を用いることで、
202 G\fIn\fP 文字集合を使用するように指示される。
203 例えば、ESC \- G はヘブライアルファベット(Hebrew alphabet) を
204 G1 として選択する。
205 .PP
206 マルチバイト文字集合ではエスケープシーケンス E $ xx または ESC $ ( xx
207 (G0 用), ESC $ ) xx (G1 用), ESC $ * xx (G2 用), ESC$ + xx (G3 用) を
208 用いることで、 G\fIn\fP 文字集合を使用するように指示される。
209 例えば、ESC $ ( C は 韓国語(Korean)文字集合を G0 として選択する。
210 ESC $ B によって選択される日本語文字セットは、より最近のバージョンでは
211 ESC & @ ESC $ B によって選択されるようになった。
212 .PP
213 ISO 4873 はより制限された文字集合の利用を規定する、その規定では、G0 は(常に ASCIIに)固定される。従って、G1, G2, G3
214 は最上位ビットがセットされたコードとしてのみ呼び出すことができる。特に、\fB\(haN\fP と \fB\(haO\fP は用いられず、ESC ( xx は
215 xx=B としてのみ用いることができ、 ESC ) xx, ESC * xx, ESC + xx はそれぞれ ESC \- xx, ESC . xx,
216 ESC / xx と等価になる。
217 .SS TIS\-620
218 TIS 620 はタイの国定標準文字セットで、 ASCII の上位集合である。 ISO 8859 系列と同様に、タイ文字は 0xa1\(en0xfe
219 に配置される。
220 .SS Unicode
221 Unicode (ISO10646) は、人間が用いる全ての言語の全ての文字を、 明確にあらわすことを目的とした規格である。 Unicode
222 の構造は各文字のエンコードに 20.1 ビットを与えている。 ほとんどのコンピューターは 20.1 ビットの整数を扱えないので、 Unicode
223 は普通内部データとして 32 ビット整数にエンコードされ、 16 ビット整数の列 (UTF\-16)(ある種の珍しい文字をエンコードする場合にだけ 2
224 つの 16 ビット整数が必要となる)か、 8 ビットバイトの列 (UTF\-8)として扱われる。
225 .PP
226 Linux は 8\-bit Unicode Transformation Form(UTF\-8) を用いて Unicode を
227 あらわす。 UTF\-8 は Unicode の可変長表現である。UTF\-8 は 7 ビットを
228 符号化するのに 1 バイトを、 11 ビットでは 2 バイトを、
229 16 ビットでは 3 バイトを、
230 21 ビットでは 4 バイトを、
231 26 ビットでは 5 バイトを、
232 31 ビットでは 6 バイトを用いる。
233 .PP
234 0,1,x をゼロ、1、任意のビットとすると、あるバイト 0xxxxxxx は Unicode では
235 00000000 0xxxxxxx とあらわされる。これは、ASCII の 0xxxxxxx と同じ
236 シンボルのコードである。このように、ASCII は変更なしに UTF\-8 に変換でき、
237 ASCII のみを使う場合は、コードにおいてもファイルサイズにおいても、
238 変更に関して何も気にしなくてよい。
239 .PP
240 110xxxxx というバイトは 2 バイトコードの始まりである、そして、110xxxxx
241 10yyyyyy は 00000xxx xxyyyyyy というように組み立てられる。また、
242 1110xxxx は 3 バイトコードの始まりであり、1110xxxx 10yyyyyy 10zzzzzz
243 は xxxxyyyy yyzzzzzz というように組み立てられる(UTF\-8 が 31 ビット
244 ISO 10646 コードを利用するときは、この工程は 6 バイトコードまで発展させられる)。
245 .PP
246 ISO 8859 文字集合を使ったほとんどのテキストでは、このことは、ASCII の範囲外を使った文字は二つのバイトに符号化されるということを意味する。
247 (UTF\-8 を使うと、ISO\-8859 を使用している) 元々のテキストファイルのサイズから 1 〜 2
248 パーセント大きくなってしまうことになる。ロシア語やギリシャ語のテキストでは、これによって元のテキストは 2 倍の大きさになることになる。なぜなら、
249 これらの言語の文字のほとんどが ASCII の範囲外だからである。日本語のユーザーの場合には、現在広く利用されている 16 ビットコードに 3
250 バイト必要ということだ。いくつかの文字集合 (特に ISO 8859\-1) から Unicode
251 への変換はアルゴリズムで行うことができるが、汎用的な変換には変換テーブルが必要であり、 16 ビットコードの場合はこのテーブルはかなり大きなものとなる。
252 .PP
253 UTF\-8 は自己同期的である。10xxxxxx は終端であり、ほかのバイトはコードの
254 先頭である。UTF\-8 の文字列における ASCII のバイトは、常にその文字自身を
255 表現することに注目してほしい。特に、幾つかの大きなコードのパートを形成
256 するために、NUL (\(aq\e0\(aq) や \(aq/\(aq を埋め込む必要はない。
257 .PP
258 ASCII と NUL と \(aq/\(aq は変更されないため、カーネルは UTF\-8 を
259 使用していることを特に意識しなくても良い。
260 カーネルはバイトが何をあらわしているかに注意する必要がない。
261 .PP
262 Unicode データ列のレンダリングは典型的には Unicode のサブセットからグリフへのマップである"サブフォント (subfont)"
263 テーブルを利用して行われる。 カーネル内部では、Unicode を使ってビデオ RAM 内部にロードされたサブフォントを記述している。 これは、
264 UTF\-8 モードの Linux コンソールでは 512 個の異なったシンボルを持った文字集合を利用できることを意味する。 これは、
265 日本語、中国語、韓国語では十分ではないが、 その他のほとんどの目的では十分である。
266 .SH 関連項目
267 \fBiconv\fP(1), \fBascii\fP(7), \fBiso_8859\-1\fP(7), \fBunicode\fP(7), \fButf\-8\fP(7)
268 .SH この文書について
269 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
270 \%https://www.kernel.org/doc/man\-pages/ に書かれている。