OSDN Git Service

e2a720e2bb3b994b0845c3a6a385559eebb87fb7
[linuxjm/LDP_man-pages.git] / draft / man7 / utf-8.7
1 .\" Hey Emacs! This file is -*- nroff -*- source.
2 .\"
3 .\" Copyright (C) Markus Kuhn, 1996, 2001
4 .\"
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 .\"
10 .\" The GNU General Public License's references to "object code"
11 .\" and "executables" are to be interpreted as the output of any
12 .\" document formatting or typesetting system, including
13 .\" intermediate and printed output.
14 .\"
15 .\" This manual is distributed in the hope that it will be useful,
16 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
17 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 .\" GNU General Public License for more details.
19 .\"
20 .\" You should have received a copy of the GNU General Public
21 .\" License along with this manual; if not, write to the Free
22 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
23 .\" USA.
24 .\"
25 .\" 1995-11-26  Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
26 .\"      First version written
27 .\" 2001-05-11  Markus Kuhn <mgk25@cl.cam.ac.uk>
28 .\"      Update
29 .\"
30 .\"*******************************************************************
31 .\"
32 .\" This file was generated with po4a. Translate the source file.
33 .\"
34 .\"*******************************************************************
35 .TH UTF\-8 7 2001\-05\-11 GNU "Linux Programmer's Manual"
36 .SH 名前
37 UTF\-8 \- ASCII と互換性のある多バイト Unicode の符号化
38 .SH 説明
39 \fBユニコード (Unicode) 3.0\fP 文字集合は 16 ビットのコード空間を占める。
40 最も単純な Unicode の符号化方法 (\fBUCS\-2\fP)
41 では、文字は 16 ビット・ワード (16 ビット文字の列) で構成される。
42 この列には、
43 \(aq\e0\(aq や \(aq/\(aq のような (ファイル名や C のライブラリ関数の引き数の内部で)
44 特殊な意味を持つ 16 ビット文字が含まれることがある。
45 さらに、ほとんどの UNIX ツールは ASCII ファイルを入力として期待するので、
46 大幅な変更なしには 16 ビットワードを文字として読むことができない。
47 これらの理由から、\fBUCS\-2\fP はファイル名・テキストファイル・環境変数などに用いる、
48 外部用の \fBUnicode\fP 符号としては不適切である。
49 Unicode のスーパーセットである
50 \fBISO 10646 Universal Character Set (UCS)\fP
51 は 31 ビットのコード空間を占めるが、その最も単純な符号化である
52 \fBUCS\-4\fP にも (32 ビット・ワードの列として) 同じ問題がある。
53
54 \fBUnicode\fP と \fBUCS\fP の \fBUTF\-8\fP 符号化にはこれらの問題がないので、
55 UNIX 形式の OS 上で \fBUnicode\fP 文字集合を使用するための一般的な方法となっている。
56 .SS 性質
57 \fBUTF\-8\fP 符号化は以下のような素晴しい性質を備えている:
58 .TP  0.2i
59 *
60 \fBUCS\fP 文字のうち 0x00000000 から 0x0000007f まで (古典的な \fBUS\-ASCII\fP の文字) は
61 (ASCII との互換性のために) 単純に 0x00 から 0x7f のバイトに符号化する。
62 これは 7 ビット ASCII 文字のみを含むファイルや文字列に関しては、
63 \fBASCII\fP と \fBUTF\-8\fP で同じ符号化を行なうことを意味する。
64 .TP 
65 *
66 0x7f より大きいのすべての
67 \fBUCS\fP 文字は、 0x80 から 0xfd までの範囲のバイトのみを含む
68 多バイト文字列に符号化される。
69 したがって文字列に
70 ASCII バイトが含まれることがなく、\(aq\e0\(aq や \(aq/\(aq の問題は発生しない。
71 .TP 
72 *
73 \fBUCS\-4\fP
74 文字列では辞書的ソートの順序が保たれる。
75 .TP 
76 *
77 2^31 ビットのすべての UCS コード が \fBUTF\-8\fP を使用して符号化できる。
78 .TP 
79 *
80 \fBUTF\-8\fP 符号化では 0xfe と 0xff のバイトは絶対に使用しない。
81 .TP 
82 *
83 ASCII でない \fBUCS\fP 文字の多バイト列の最初のバイトは、
84 常に 0xc0 から 0xfd の範囲で表現され、
85 その文字が何バイトで構成されているかを示す。
86 多バイト列の残りの部分のバイトは、それぞれ 0x80 から 0xbf の範囲にある。
87 これにより同期が容易になり、ステートレスな符号化が可能になり、
88 バイトの紛失に対して堅固になる。
89 .TP 
90 *
91 \fBUTF\-8\fP を使用した \fBUCS\fP 文字の符号化は最大 6 バイトの長さになる。
92 しかし、\fBUnicode\fP 規格では 0x10ffff より先の文字を指定しないので、
93 Unicode 文字は \fBUTF\-8\fP では 4 バイトまでにしかならない。
94 .SS 符号化
95 以下のバイト列が文字の表現に使用される。
96 どのバイト列を使用するかは文字の UCS コード番号に依存する:
97 .TP  0.4i
98 0x00000000 \- 0x0000007F:
99 0\fIxxxxxxx\fP
100 .TP 
101 0x00000080 \- 0x000007FF:
102 110\fIxxxxx\fP 10\fIxxxxxx\fP
103 .TP 
104 0x00000800 \- 0x0000FFFF:
105 1110\fIxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
106 .TP 
107 0x00010000 \- 0x001FFFFF:
108 11110\fIxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
109 .TP 
110 0x00200000 \- 0x03FFFFFF:
111 111110\fIxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
112 .TP 
113 0x04000000 \- 0x7FFFFFFF:
114 1111110\fIx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
115 .PP
116 \fIxxx\fP ビットの部分には 2 進数で表わした文字コードのビット部分が対応する。
117 その文字を表現するのに最も短いバイト列のみが使用できる。
118 .PP
119 0xd800\(en0xdfff (UTF\-16 サロゲート) や
120 0xfffe, 0xffff (UCS の noncharacter) という \fBUCS\fP コードの値は、
121 \fBUTF\-8\fP に準拠したストリームに入れるべきではない。
122 .SS 例
123 \fBUnicode\fP 文字の 0xa9 = 1010 1001 (コピーライト・マーク) は UTF\-8 で符号化すると
124 以下のようになる。
125 .PP
126 .RS
127 11000010 10101001 = 0xc2 0xa9
128 .RE
129 .PP
130 0x2260 = 0010 0010 0110 0000 (不等号) は以下の通り。
131 .PP
132 .RS
133 11100010 10001001 10100000 = 0xe2 0x89 0xa0
134 .RE
135 .SS アプリケーションにおける注意
136 ユーザーはアプリケーションの \fBUTF\-8\fP サポートを有効にするために、
137 .PP
138 .RS
139 export LANG=en_GB.UTF\-8
140 .RE
141 .PP
142 のようにして \fBUTF\-8\fP ロケールを選択しなければならない。
143 .PP
144 使用されている文字符号化を分かっていなければならない
145 アプリケーションソフトウェアは、
146 以下のようにして常にロケールを設定すべきである。
147 .PP
148 .RS
149 setlocale(LC_CTYPE, "")
150 .RE
151 .PP
152 また、プログラマーは
153 .PP
154 .RS
155 strcmp(nl_langinfo(CODESET), "UTF\-8") == 0
156 .RE
157 .PP
158 という式を評価することで、
159 \fBUTF\-8\fP ロケールが選択されていて、プレーンテキストの標準入出力・端末間通信・
160 プレーンテキストファイルの内容・ファイル名・環境変数が
161 \fBUTF\-8\fP で符号化されているかをチェックすることができる。
162 .PP
163 \fBUS\-ASCII\fP や \fBISO 8859\fP
164 といったシングルバイトの符号化が習慣になっているプログラマーは、
165 これまでの 2 つの仮定が
166 \fBUTF\-8\fP ロケールにおいては最早有効ではなくなったことを知っておくべきだ。
167 1 番目の変更点は、1 バイトが必ずしも 1 つの文字に対応しないという点である。
168 2 番目の変更点は、最近の端末エミュレータは
169 \fBUTF\-8\fP モードにおいて中国語・日本語・韓国朝鮮語の
170 \fB全角文字\fP やスペースが入らない (nonspacing)
171 \fB合成文字 (combining characters)\fP に対応しているので、
172 \fBASCII\fP のときのように 1 文字出力した後で
173 カーソルを必ずしも 1 つだけ進めるわけではないという点である。
174 今日では、文字やカーソルの位置を数えるのに
175 \fBmbsrtowcs\fP(3) や \fBwcswidth\fP(3)
176 といったライブラリ関数を使うべきである。
177 .PP
178 (VT100 端末などで使われる) \fBISO 2022\fP 符号化形式から
179 \fBUTF\-8\fP へ切替える公式なエスケープシーケンスは ESC % G ("\x1b%G") である。
180 これに対応する \fBUTF\-8\fP から \fBISO 2022\fP へのリターンシーケンスは
181 ESC % @ ("\x1b%@") である。
182 (G0 セットと G1 セットを切替えるといった)
183 その他の ISO 2022 シーケンスは、UTF\-8 モードでは使えない。
184 .PP
185 予知できる将来では、POSIX システム上の一般的な文字符号化の全てのレベルで
186 \fBUTF\-8\fP が \fBASCII\fP と \fBISO 8859\fP を置き換え、
187 プレーンテキストを扱う非常に優れた環境が作られることが期待できる。
188 .SS セキュリティ
189 \fBUnicode\fP と \fBUCS\fP の規格では、
190 \fBUTF\-8\fP の生成者はできるだけ短い形式を用いるよう要求している。
191 例えば、先頭バイトが 0xc0 であるような 2 バイト列を
192 生成するのは準拠しているとはいえない。
193 \fBUnicode 3.1\fP では、規格に準拠するプログラムは
194 最短の表現形式ではない入力を受け付けない、という要求事項が追加された。
195 これはセキュリティ上の理由による。
196 ユーザー入力がセキュリティ上の危険に対しチェックされる場合、
197 プログラムは \fBASCII\fP 版の "/../" や ";" や "NUL" だけをチェックし、
198 最短に符号化されてないこれらの文字を見過ごしてしまうかもしれないからである。
199 なぜなら、最短ではない \fBUTF\-8\fP 符号化では、これらの文字を表現するような様々な
200 \fBASCII\fP 以外の形式が存在するためである。
201 .SS 標準
202 .\" .SH AUTHOR
203 .\" Markus Kuhn <mgk25@cl.cam.ac.uk>
204 ISO/IEC 10646\-1:2000, Unicode 3.1, RFC\ 2279, Plan 9.
205 .SH 関連項目
206 \fBnl_langinfo\fP(3), \fBsetlocale\fP(3), \fBcharsets\fP(7), \fBunicode\fP(7)