OSDN Git Service

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