Imported upstream version 1.5
[manpages-zh.git] / src / man7 / utf-8.7
blobc707c8f57521c7706a49726af1dbf576312c503e
1 .\" Copyright (C) Markus Kuhn, 1996
2 .\" 中文版 Copyright (c) Bill Pan 和 www.LinuxForum.net
3 .\"
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, write to the Free
21 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
22 .\" USA.
23 .\"
24 .\" 1995-11-26 Markus Kuhn 
25 .\" First version written
26 .\"
27 .TH UTF-8 7 "1995-11-26" "Linux" "Linux Programmer's Manual"
28 .SH NAME
29 UTF-8 \- ASCII 兼容的多字节 Unicode 编码
30 .SH 描述
31 The
32 .B Unicode
33 字符集使用的是 16 位(双字节)码。最普遍的 Unicode 编码方法(
34 .BR UCS-2 )
35 由一个 16 位双字序列组成。
36 这样的字符串中包括了的一些如‘\\0’或‘/’这样的在文件名中或者是在 C
37 库函数中具有特殊意义的字符。
38 另外,如果没有做重大的修正的话,大部分操作 ASCII 码文件的 UNIX
39 工具不能够正确识别 16 位的字符。因此,
40 .B UCS-2
41 对于
42 .B Unicode
43 的文件名、文本文件、环境变量等等来说并不是一种合适的外部编码方式。
44 .BR "ISO 10646 Universal Character Set (UCS)" ,
45 是 Unicode 的超集,甚至使用了 31 位编码方式,
46 另外还有使用 32 编码的 UCS-4 也有同样上述的问题。
47 .B UCS-4
48 而用
49 .B UTF-8
50
51 .B Unicode
52 .B UCS
53 编码
54 就不会存在这样的问题。所以,UTF-8 很明显的是在 UNIX 类操作系统下的
55 .B Unicode
56 字符集的解决方案。
57 .SH 属性
59 .B UTF-8 
60 编码具有以下优良属性:
61 .TP 0.2i
63 .B UCS
64 字符从 0x00000000 到 0x0000007f (传统的
65 .B US-ASCII
66 字符)简单地编码为字节 0x00 到 0x7f (与 ASCII 码兼容)。
67 这意味着只包含 7 位 ASCII 字符的文件和字符串在
68 .B ASCII
69
70 .BR UTF-8 .
71 编码方式下是完全一样的。
72 .TP
74 所有大于 0x7f 的
75 .B UCS
76 字符被编码成为多字节序列。该序列全部是由 0x80 到 0fd 的字符组成,
77 这样就不会有标准 ASCII 字符会
78 被作为某个字的一个部分这种现象出现,
79 对于‘\\0’和‘\’这样的特殊字符来说也就不会有问题了。
80 .TP
82 保留了
83 .B UCS-4
84 字典中的字节串的排列顺序。
85 .TP
87 所有 2^32 次方的 UCS 码都能够使用
88 .BR UTF-8 
89 来进行编码。
90 .TP
92 0xfe 和 0xff 两个字符在
93 .B UTF-8
94 中不会被用到。
95 .TP
96
97 表示非 ASCII 码的
98 .B UCS
99 多字节串的开始字符总是 0xc0 到 0xfd 之间的字符,并会指出该串的长度。
100 多字节串的其他字符都是 0x80
101 到 0xbf 之间的字符。
102 这使得再同步非常简单,并令编码是无态的,
103 丢字节现象也不容易发生。
107 .B UTF-8
108 编码的
109 .B UCS
110 字符可以增加到 6 个字节的长度。而
111 .B Unicode
112 只能增加到 3 个字节长。由于 Linux 只使用 16 位的
113 .B Unicode
115 .BR UCS 
116 的子集。所以在 Linux 下,
117 .B UTF-8
118 多字节串长度最多不会超过三个字节。
119 .SH 编码方式
120 下面的字节串用来表示一个字符。用什么串依照该字符在 UCS 编码中的序号来定:
121 .TP 0.4i
122 0x00000000 - 0x0000007F:
123 .RI 0xxxxxxx
125 0x00000080 - 0x000007FF:
126 .RI 110xxxxx 
127 .RI 10xxxxxx
129 0x00000800 - 0x0000FFFF:
130 .RI 1110xxxx
131 .RI 10xxxxxx
132 .RI 10xxxxxx
134 0x00010000 - 0x001FFFFF:
135 .RI 11110xxx
136 .RI 10xxxxxx
137 .RI 10xxxxxx
138 .RI 10xxxxxx
140 0x00200000 - 0x03FFFFFF:
141 .RI 111110xx
142 .RI 10xxxxxx
143 .RI 10xxxxxx
144 .RI 10xxxxxx
145 .RI 10xxxxxx
147 0x04000000 - 0x7FFFFFFF:
148 .RI 1111110x
149 .RI 10xxxxxx
150 .RI 10xxxxxx
151 .RI 10xxxxxx
152 .RI 10xxxxxx
153 .RI 10xxxxxx
155 这里
156 .I xxx
157 的位置二进制位形式的字符编码填入。
158 只用最短的那个足够表达一个字符编码数的多字节串。
159 .SH 举例说明
160 .B Unicode
161 字符 0xa9 = 1010 1001 (版权所有的符号) 在 UTF-8 中被编码为:
164 11000010 10101001 = 0xc2 0xa9
167 字符0x2260 = 0010 0010 0110 0000 (“不等于”符号)被编码为:
170 11100010 10001001 10100000 = 0xe2 0x89 0xa0
172 .SH 遵循标准
173 ISO 10646, Unicode 1.1, XPG4, Plan 9.
174 .SH 作者
175 Markus Kuhn 
176 .SH 参考
177 .BR unicode (7)
179 .SH "[中文版维护人]"
180 .B billpan <billpan@yeah.net>
181 .SH "[中文版最新更新]"
182 .BR 2000/11/09
183 .SH "《中国linux论坛man手册页翻译计划》:"
184 .BI http://cmpp.linuxforum.net