Gentoo Archives: gentoo-commits

From: "Le Zhang (r0bertz)" <r0bertz@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo commit in xml/htdocs/doc/zh_cn: metadoc.xml utf-8.xml
Date: Sat, 23 Aug 2008 19:09:07
Message-Id: E1KWyTv-0007Em-F2@stork.gentoo.org
1 r0bertz 08/08/23 19:09:03
2
3 Modified: metadoc.xml
4 Added: utf-8.xml
5 Log:
6 [zh_cn] added utf-8.xml
7
8 Revision Changes Path
9 1.43 xml/htdocs/doc/zh_cn/metadoc.xml
10
11 file : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/metadoc.xml?rev=1.43&view=markup
12 plain: http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/metadoc.xml?rev=1.43&content-type=text/plain
13 diff : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/metadoc.xml?r1=1.42&r2=1.43
14
15 Index: metadoc.xml
16 ===================================================================
17 RCS file: /var/cvsroot/gentoo/xml/htdocs/doc/zh_cn/metadoc.xml,v
18 retrieving revision 1.42
19 retrieving revision 1.43
20 diff -u -r1.42 -r1.43
21 --- metadoc.xml 16 Jun 2008 19:44:42 -0000 1.42
22 +++ metadoc.xml 23 Aug 2008 19:09:02 -0000 1.43
23 @@ -1,6 +1,6 @@
24 <?xml version="1.0" encoding="UTF-8"?>
25 <!DOCTYPE metadoc SYSTEM "/dtd/metadoc.dtd">
26 -<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/zh_cn/metadoc.xml,v 1.42 2008/06/16 19:44:42 r0bertz Exp $ -->
27 +<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/zh_cn/metadoc.xml,v 1.43 2008/08/23 19:09:02 r0bertz Exp $ -->
28 <!-- English CVS version: 1.212 -->
29 <metadoc lang="zh_cn" parent="/doc/en/metadoc.xml">
30 <version>1.134</version>
31 @@ -103,7 +103,7 @@
32 <file id="mysql-howto">/doc/en/mysql-howto.xml</file>
33 <file id="postgres-howto">/doc/en/postgres-howto.xml</file>
34 <file id="bt-guide">/doc/en/bluetooth-guide.xml</file>
35 - <file id="utf-8">/doc/en/utf-8.xml</file>
36 + <file id="utf-8">/doc/zh_cn/utf-8.xml</file>
37 <file id="cron-guide">/doc/en/cron-guide.xml</file>
38 <file id="ldap-howto">/doc/en/ldap-howto.xml</file>
39 <file id="nvidia-guide">/doc/zh_cn/nvidia-guide.xml</file>
40
41
42
43 1.1 xml/htdocs/doc/zh_cn/utf-8.xml
44
45 file : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/utf-8.xml?rev=1.1&view=markup
46 plain: http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/utf-8.xml?rev=1.1&content-type=text/plain
47
48 Index: utf-8.xml
49 ===================================================================
50 <?xml version='1.0' encoding="UTF-8"?>
51 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/zh_cn/utf-8.xml,v 1.1 2008/08/23 19:09:02 r0bertz Exp $ -->
52 <!-- English CVS version: 1.47 -->
53 <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
54
55 <guide link="/doc/zh_cn/utf-8.xml" lang="zh_cn">
56 <title>在Gentoo下使用UTF-8</title>
57
58 <author title="作者">
59 <mail link="slarti@g.o">Thomas Martin</mail>
60 </author>
61 <author title="贡献者">
62 <mail link="devil@××××××××××.ua">Alexander Simonov</mail>
63 </author>
64 <author title="编辑">
65 <mail link="fox2mike@g.o">Shyam Mani</mail>
66 </author>
67 <author title="译者">
68 <mail link="goldenshore999@×××××.com">周骞</mail>
69 </author>
70 <author title="审校">
71 <mail link="r0bertz@g.o">张乐</mail>
72 </author>
73
74 <abstract>
75 这个指南将会向你展示如何在Gentoo Linux系统下设置以及使用UTF-8 Unicode字符集。在此之前,我们会先把Unicode特别是UTF-8的好处介绍一下。
76 </abstract>
77
78 <!-- The content of this document is licensed under the CC-BY-SA license -->
79 <!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
80 <license />
81
82 <version>2.25</version>
83 <date>2007-04-17</date>
84
85 <chapter>
86 <title>字符编码</title>
87 <section>
88 <title>什么是字符编码</title>
89 <body>
90
91 <p>
92 电脑本身并不能识别文字。相反的,每一个字符都是用数字来表示的。在以前,因受电脑硬件所限,每一个用来表示字母和字符的数字集合(称作编码系统、编码或者字符集)的大小都很有限。
93 </p>
94
95 </body>
96 </section>
97 <section>
98 <title>字符编码的历史</title>
99 <body>
100
101 <p>
102 最普遍的(至少最被广泛接受的)字符集是<b>ASCII</b>(American Standard Code for Information Interchange 美国信息互换标准代码)。很多人认为ASCII是最成功的软件标准。现代ASCII编码是在1986年(ANSI X3.4, RFC 20, ISO/IEC 646:1991, ECMA-6)被美国国家标准协会统一的。
103 </p>
104
105 <p>
106 ASCII被严格限制在7比特大小,即它会用7位二进制数的组合来表示数字,在十进制中范围是从0到127。他们包括了32个不可见的控制字符,大多数是从0到31之间的范围,还有就是最后一个控制字符,位处127的DEL或删除字符。从32到126的都是可视字符:空格,标点,拉丁字母和数字。
107 </p>
108
109 <p>
110 ASCII中的第八位原来是用来作为校验的奇偶位。如果不需要的话则置为0。这意味着,每一个ASCII字符都可以用一个字节表示。
111 </p>
112
113 <p>
114 虽然在现代英语通讯中ASCII已经足够了,但是其他的欧洲语言中所包括的带重音标记的字符就不那么容易解决了。ISO 8859标准集就是开发出来解决这些需求的。它们向后和ASCII兼容,但是与ASCII不同,第八位没有被留空,而是用来给每一种编码增加127个字符。ISO 8859的局限性很快就被发现了,现在已经有15种ISO 8859标准的变种(8859-1到8859-15)。在ASCII兼容的范围内的字节外,同样字节表示的字符会经常出现冲突。让字符编码交互性的状况更加恶化的是杂,微软的某些西欧语言版本的Windows使用Windows-1252编码,而不是ISO 8859。这个编码是ISO 8859-1编码的超集,但是却有些不同。不过幸好,它们都和ASCII编码兼容。
115 </p>
116
117 <p>
118 在其他操作系统已经在为同一个语言使用不同字符集的情况下,如Shift-JIS和ISO-2022-JP,非拉丁文多字节编码——如日文韩文(以及在一定程度上中文)所用的EUC(Extended Unix Coding)编码——的进一步开发,增加了更多的混乱。那些需要查看西里尔字符的用户需要在俄语和保加利亚语用的KOI8-R和乌克兰语用的KOI8-U,以及其他的西里尔编码体系如失败的ISO 8859-5编码和常见的Windows-1251字符集之间选择。所有的这些字符集几乎和ASCII的都有兼容问题(虽然KOI8编码把西里尔字符按照拉丁顺序排列,这样如果第八位被去掉的话,这些字符一样可以在ASCII终端中通过翻译去解读。)
119 </p>
120
121 <p>
122 这带来了混乱,并且使多语言交互几乎成为不可能,尤其在字母表不同的情况下。还是让我们进入Unicode的世界。
123 </p>
124
125 </body>
126 </section>
127 <section>
128 <title>什么是Unicode?</title>
129 <body>
130
131 <p>
132 Unicode克服了传统字符集的单字节限制。它有17个“位面”,每个位面有65,536个代码点,总共可以装下1,114,112个字符。第一个位面,也叫“基本多文种平面”或BMP(Basic Multilingual Plane),包括了几乎所有你会用到的东西,很多人误认为Unicode是一个16位的字符集。
133 </p>
134
135 <p>
136 Unicode可以用多种方式去表示,但是两个最普遍的方法是<b>UTF</b>(Unicode Transformation Format,Unicode转换格式)和<b>UCS</b>(Universal Character Set,通用字符集)。跟在UTF后边的数字指定了一个单元中的比特数,而UCS则是字节数。因为UTF-8的整8位特性,她已成为最广泛使用的Unicode文字交互手段,它也是本文的主题。
137 </p>
138
139 </body>
140 </section>
141 <section>
142 <title>UTF-8</title>
143 <body>
144
145 <p>
146 UTF-8是一个变长的字符编码,也就是说它会用1到4个字节去表示一个字符。1个字节的UTF-8字符是用来编码ASCII的,这样也就让它可以和ASCII完全兼容。UTF-8意味着ASCII和拉丁字母在数据体积没有增加的前提下可以与之前的保存文本互通,因为都只用到了第一个字节。东方字符如日文用户,很不爽得被分配到了更高的字节范围,因为这样会造成最多达50%的数据体积的扩大。
147 </p>
148
149 </body>
150 </section>
151 <section>
152 <title>UTF-8能为你做什么</title>
153 <body>
154
155 <p>
156 UTF-8允许你在一个符合标准的国际多文字环境中工作,代价仅仅是数据所占空间略微增大。UTF-8是在互联网上通过Email、IRC还有几乎其他所有媒体传输非ASCII字符的首选方法。尽管如此,很多人还是认为在线交流用UTF-8是属于滥用。在某个讨论频道、邮件列表和新闻组中用<e>非ASCII</e> UTF8之前,最好先了解那里的人们对UTF-8的态度。
157 </p>
158
159 </body>
160 </section>
161 </chapter>
162
163 <chapter>
164 <title>Gentoo Linux中设置UTF-8</title>
165 <section>
166 <title>查找或建立UTF-8 Locale</title>
167 <body>
168
169 <p>
170 现在你已经理解Unicode的原理了,可以在你的系统中开始使用UTF-8了。
171 </p>
172
173 <p>
174 使用UTF-8的初步要求是要有一个支持国家语言支持(NLS)的glibc。推荐的方法是设置文件<path>/etc/locale.gen</path>。关于如何使用这个文件并不在这个文档涉及的范围内,请参阅<uri link="/doc/zh_cn/guide-localization.xml#doc_chap3_sect3">Gentoo本地化指南</uri>。
175 </p>
176
177 <p>
178 下一步,我们需要判断对应我们语言的UTF-8 locale是已经存在,还是需要去创建。
179 </p>
180
181 <pre caption="检查UTF-8 locale是否已经存在">
182 <comment>(把"zh_CN"替换成你想要的locale设置)</comment>
183 # <i>locale -a | grep 'zh_CN'</i>
184 zh_CN
185 zh_CN.UTF-8
186 </pre>
187
188 <p>
189 我们需要检查这条命令的输出里是否有以<c>.UTF-8</c>结尾的locale。如果没有以<c>.UTF-8</c>结尾的,那么我们需要创建一个UTF-8兼容的locale。
190 </p>
191
192 <note>
193 只有在没有你的语言所对应的UTF-8 locale的时候才运行以下命令。
194 </note>
195
196 <pre caption="创建一个UTF-8 locale">
197 <comment>(把"zh_CN"替换成你想要的locale设置)</comment>
198 # <i>localedef -i zh_CN -f UTF-8 zh_CN.UTF-8</i>
199 </pre>
200
201 <p>
202 另外一个指定UTF-8 locale的方法就是在文件<path>/etc/locale.gen</path>中增添相应的locale,然后运行命令<c>locale-gen</c>生成需要的locale。
203 </p>
204
205 <pre caption="/etc/locale.gen中的一行">
206 zh_CN.UTF-8 UTF-8
207 </pre>
208
209 </body>
210 </section>
211 <section>
212 <title>设置Locale</title>
213 <body>
214
215 <p>
216 要使用新locale我们需要设置一个环境变量:<c>LANG</c>(你也可以设置拥有更高优先级的<c>LC_ALL</c>变量)。设置它的方法也有很多种;有的人倾向于只针对某一个用户设置UTF-8环境,这种情况下,他们需要在他们自己的<path>~/.profile</path>中设置(如果用<c>/bin/sh</c>的话);如果用<c>/bin/bash</c>的话,就在<path> ~/.bash_profile</path>或者<path>~/.bashrc</path>设置。
217 </p>
218
219 <p>
220 其他人选择设置全局locale。有一种情况下作者特别推荐这样设置,就是在使用<path>/etc/init.d/xdm</path>的时候。因为这个启动脚本会在 前面提到的任何shell启动文件被读取之前启动显示管理器和桌面,也就是说如果不设置全局locale,那么这个脚本启动时任何相关的环境变量都没有定义。
221 </p>
222
223 <p>
224 全局locale设置应该保存在文件<path>/etc/env.d/02locale</path>中。这个文件看起来应该和以下内容类似:
225 </p>
226
227 <pre caption="/etc/env.d/02locale示例">
228 <comment>(不用再说了,把你的locale代替掉"zh_CN.UTF-8")</comment>
229 LANG="zh_CN.UTF-8"
230 </pre>
231
232 <note>
233 你可以用<c>LC_ALL</c>代替<c>LANG</c>。这个变量会设置locale的所有分类,包括数字和币种等。在一些情况下,这会引起一些问题。但是,大多数用户应该是不会因使用<c>LC_ALL</c>而碰到问题。关于<c>LC_ALL</c>影响到的分类的信息,请阅读<uri link="http://www.gnu.org/software/libc/manual/html_node/Locale-Categories.html#Locale-Categories"> GNU locale页</uri>。
234 </note>
235
236 <p>
237 下一步,必须要以之前的改动来更新环境变量。
238 </p>
239
240 <pre caption="更新环境变量">
241 # <i>env-update</i>
242 >>> Regenerating /etc/ld.so.cache...
243 * Caching service dependencies ...
244 # <i>source /etc/profile</i>
245 </pre>
246
247 <p>
248 现在,不带参数的运行<c>locale</c>命令,看看我们是否已经正确设置了环境变量。
249 </p>
250
251 <pre caption="检查我们的新locale已经在环境变量里了">
252 # <i>locale</i>
253 LANG=
254 LC_CTYPE="zh_CN.UTF-8"
255 LC_NUMERIC="zh_CN.UTF-8"
256 LC_TIME="zh_CN.UTF-8"
257 LC_COLLATE="zh_CN.UTF-8"
258 LC_MONETARY="zh_CN.UTF-8"
259 LC_MESSAGES="zh_CN.UTF-8"
260 LC_PAPER="zh_CN.UTF-8"
261 LC_NAME="zh_CN.UTF-8"
262 LC_ADDRESS="zh_CN.UTF-8"
263 LC_TELEPHONE="zh_CN.UTF-8"
264 LC_MEASUREMENT="zh_CN.UTF-8"
265 LC_IDENTIFICATION="zh_CN.UTF-8"
266 LC_ALL=zh_CN.UTF-8
267 </pre>
268
269 <p>
270 好了。你已经在使用UTF-8 locale了,下一步就是配置你的日常使用的应用程序了。
271 </p>
272
273 </body>
274 </section>
275 </chapter>
276
277 <chapter>
278 <title>应用程序支持</title>
279 <section>
280 <body>
281
282 <p>
283 当Unicode刚开始在软件世界得到应用的时候,多字节字符集和用来写日常使用的程序的语言如C语言等不是很合拍。即使是今天,有的程序仍然不能正确处理UTF-8。幸运的是,大多数都没问题!
284 </p>
285
286 </body>
287 </section>
288 <section>
289 <title>文件名,NTFS和FAT</title>
290 <body>
291
292 <p>
293 在内核选项中,有那么几个NLS选项,但是千万别被混淆了。大多数情况下,你只需要在内核中加入UTF-8 NLS支持,以及将默认NLS设置成utf8就可以了。
294 </p>
295
296 <pre caption="UTF-8 NLS的内核配置步骤">
297 File Systems --&gt;
298 Native Language Support --&gt;
299 (utf8) Default NLS Option
300 &lt;*&gt; NLS UTF8
301 <comment>(Also &lt;*&gt; other character sets that are in use in
302 your FAT filesystems or Joilet CD-ROMs.)</comment>
303 </pre>
304
305 <p>
306 如果你想加载NTFS分区,你需要为mount指定一个<c>nls=</c>选项。如果你计划加载FAT分区,你需要为mount指定一个<c>codepage=</c>选项。你也可以在内核配置中为FAT设置一个默认的codepage。注意,mount命令中指定的<c>codepage</c>会覆盖内核中的设置。
307 </p>
308
309 <pre caption="内核中的FAT设置">
310 File Systems --&gt;
311 DOS/FAT/NT Filesystems --&gt;
312 (437) Default codepage for fat
313 </pre>
314
315 <p>
316 你应该避免把<c>Default iocharset for fat</c>设置成UTF-8,因为这个是不推荐的。相反,你可以在mount的时候加入选项utf8=true。要获取更多相关的信息,请参阅<c>man mount</c>和内核文档<path>/usr/src/linux/Documentation/filesystems/vfat.txt</path>。
317 </p>
318
319 <p>
320 如果想改变文件名的编码,可以用<c>app-text/convmv</c>。
321 </p>
322
323 <pre caption="convmv使用示例">
324 # <i>emerge --ask app-text/convmv</i>
325 <comment>(命令格式)</comment>
326 # <i>convmv -f &lt;当前编码&gt; -t utf-8 &lt;文件名&gt;</i>
327 <comment>(把iso-8859-1换成你想要的原始编码)</comment>
328 # <i>convmv -f iso-8859-1 -t utf-8 文件名</i>
329 </pre>
330
331 <p>
332 如果想改变文件<e>内容</e>,那么请使用<c>glibc</c>提供的工具<c>iconv</c>。
333 </p>
334
335 <pre caption="iconv使用示例">
336 <comment>(把iso-8859-1换成你想要的原始编码)</comment>
337 <comment>(检查输出是否合法)</comment>
338 # <i>iconv -f iso-8859-1 -t utf-8 文件名</i>
339 <comment>(要转换文件,你必须创建一个新文件)</comment>
340 # <i>iconv -f iso-8859-1 -t utf-8 文件名 > 新文件名</i>
341 </pre>
342
343 <p>
344 <c>app-text/recode</c>也可以用来做这个事情。
345 </p>
346
347 </body>
348 </section>
349 <section>
350 <title>系统终端</title>
351 <body>
352
353 <impo>
354 在终端用Unicode,你需要安装>=sys-apps/baselayout-1.11.9。(译注:此节只适用于非英文的其他西方文字,终端里要使用中文需要安装zhcon)
355 </impo>
356
357 <p>
358 在终端下开启UTF-8,你要编辑<path>/etc/rc.conf</path>并且设置<c>UNICODE="yes"</c>,还要阅读该文件内相应的注释——如果你想完全发挥Unicode的优点,那么一个覆盖范围足够广的字体是很重要的。为了不出错,请确保你已经按照<uri link="#doc_chap1">第一章</uri>中所说的正确的建立了一个Unicode locale。
359 </p>
360
361 <p>
362 一个名为<c>KEYMAP</c>变量应该指定一个Unicode键盘布局,此变量位于<path>/etc/conf.d/keymaps</path>中。
363 </p>
364
365 <pre caption="/etc/conf.d/keymaps示例片段">
366 <comment>(把"uk"替换成你自己键盘的布局)</comment>
367 KEYMAP="uk"
368 </pre>
369
370 </body>
371 </section>
372 <section>
373 <title>Ncurses和Slang</title>
374 <body>
375
376 <note>
377 如果你没安装或者不用Slang的话,忽略这段中相关Slang的信息。
378 </note>
379
380 <p>
381 在<path>/etc/make.conf</path>里边的全局USE标记中加入<c>unicode</c>是很明智的,然后再重新emerge <c>sys-libs/ncurses</c>和<c>sys-libs/slang</c>。Portage在升级你的系统时也会自动帮你搞定的。
382 </p>
383
384 <pre caption="升级你的系统">
385 # <i>emerge --update --deep --newuse world</i>
386 </pre>
387
388 <p>
389 我们还需要重新编译依赖这两个库的软件包,这样USE标记的改变就会被应用。我们用到的工具(<c>revdep-rebuild</c>)是<c>gentoolkit</c>的一部分。
390 </p>
391
392 <pre caption="重新编译连接到ncurses或者slang的程序">
393 # <i>revdep-rebuild --soname libncurses.so.5</i>
394 # <i>revdep-rebuild --soname libslang.so.1</i>
395 </pre>
396
397 </body>
398 </section>
399 <section>
400 <title>KDE,GNOME和Xfce</title>
401 <body>
402
403 <p>
404 所有主流桌面环境都完全支持Unicode,除了之前已经提及的设置外也不需要进一步设置什么了。这是因为底层的图形工具包(Qt或GTK+2)已经支持UTF-8。这样,所有由这些工具包写出来的程序都是原生的支持UTF-8的。
405 </p>
406
407 <p>
408 当然,也有例外,比如的Xlib和GTK+1。GTK+1需要在~/.gtkrc里边有一个iso-10646-1的字体设置,例如<c>-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1</c>。还有就是使用Xlib或者Xaw的程序需要有类似的设置,不然他们会罢工的。
409 </p>
410
411 <note>
412 如果你安装了Gnome控制中心的某个版本的话,就用它来设置好了。选任何一个iso10646-1的字体就可以了。
413 </note>
414
415 <pre caption="示例~/.gtkrc(为GTK+1)定义兼容Unicode的字体">
416 style "user-font"
417 {
418 fontset="-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1"
419 }
420 widget_class "*" style "user-font"
421 </pre>
422
423 <p>
424 如果有一个程序同时支持Qt和GTK+2的图形界面,那么GTK+2的图形界面应该会更好的支持Unicode。
425 </p>
426
427 </body>
428 </section>
429 <section>
430 <title>X11和字体</title>
431 <body>
432
433 <impo>
434 <c>x11-base/xorg-x11</c>对Unicode的支持比XFree86更好,<e>极度</e>推荐。
435 </impo>
436
437 <p>
438 TrueType字体支持Unicode,而且Xorg自带的大多数字体都有很好的字符支持,不过显然这些字体不可能覆盖Unicode里的每一个字。要为X提供东亚字符支持的话,记得在USE标记中加入<c>cjk</c>。很多其他的程序也使用这个USE标记,所以有理由把它加入永久的USE标记。
439 </p>
440
441 <p>
442 还有,Porage树里有几个字体也支持Unicode。
443 </p>
444
445 <pre caption="可选:安装一些支持Unicode的字体">
446 # <i>emerge terminus-font intlfonts freefonts cronyx-fonts corefonts</i>
447 </pre>
448
449 </body>
450 </section>
451 <section>
452 <title>窗口管理器和终端模拟器</title>
453 <body>
454
455 <p>
456 不基于GTK或Qt的窗口管理器一般也会有很不错的Unicode支持,因为他们一般都用Xft库来处理字体的。如果你的窗口管理器不用Xft处理字体,你仍然可以把之前提及的字体设置(即-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1)作为Unicode字体使用。
457 </p>
458
459 <p>
460 使用Xft并支持Unicode的终端模拟器较难获得。除了Konsole和gnome-terminal外,Portage中最好的选择就是<c>x11-terms/rxvt-unicode</c>,<c>xfce-extra/terminal </c>,<c>gnustep-apps/terminal</c>,<c>x11-terms/mlterm</c>,或者编译时带了<c>unicode</c>USE的<c>x11-terms/xterm</c>并且用<c>uxterm</c>启动。<c>app-misc/screen</c>在以<c>screen -U</c>启动的时候也支持UTF-8,或者将以下内
461 容加入到<path>~/.screenrc</path>:
462 </p>
463
464 <pre caption="支持UTF-8的~/.screenrc">
465 defutf8 on
466 </pre>
467
468 </body>
469 </section>
470 <section>
471 <title>Vim,Emacs,Xemacs和Nano</title>
472 <body>
473
474 <p>
475 Vim完全支持UTF-8,而且还有内置UTF-8文件检测。可以用<c>:help mbyte.txt</c>获取更多的信息。
476 </p>
477
478 <p>
479 Emacs 22.x以及更高的版本也完全支持UTF-8。Xemacs 22.x暂时还不支持组合字符。
480 </p>
481
482 <p>
483 低版本的Emacs和Xemacs也许需要安装<c>app-emacs/mule-ucs</c>或<c>app-xemacs/mule-ucs</c>,然后把以下内容加入到<path>~/.emacs</path>以支持UTF-8里的CJK(中日韩)语言。
484 </p>
485
486 <pre caption="Emacs CJK UTF-8支持">
487 (require 'un-define)
488 (require 'jisx0213)
489 (set-language-environment "Japanese")
490 (set-default-coding-systems 'utf-8)
491 (set-terminal-coding-system 'utf-8)
492 </pre>
493
494 <p>
495 Nano从1.3.6版本以后都完全支持UTF-8的。
496 </p>
497
498 </body>
499 </section>
500 <section>
501 <title>Shell</title>
502 <body>
503
504 <p>
505 现在,<c>bash</c>通过GNU readline库完全支持Unicode。Z Shell(<c>zsh</c>)如果有<c>unicode</c>USE标志的话,也可以提供Unicode支持。
506 </p>
507
508 <p>
509 C shell,<c>tcsh</c>和<c>ksh</c>完全不支持UTF-8的。
510 </p>
511
512 </body>
513 </section>
514 <section>
515 <title>Irssi</title>
516 <body>
517
518 <p>
519 Irssi完全支持UTF-8,虽然她还是要求用户去设置一个选项。
520 </p>
521
522 <pre caption="为Irssi开启UTF-8">
523 /set term_charset UTF-8
524 </pre>
525
526 <p>
527 那些对ASCII以外的字符不使用UTF-8字符集的频道,可以用<c>/recode</c>命令来转换这些字符。输入<c>/help recode</c>可以获取更多信息。
528 </p>
529
530 </body>
531 </section>
532 <section>
533 <title>Mutt</title>
534 <body>
535
536 <p>
537 Mutt邮件用户代理有很不错的Unicode支持。你不需要在配置文件中加入任何东西就可以让Mutt支持UTF-8。如果你的配置文件(包括签名)都是UTF-8编码的话,Mutt不需要任何修改就可以在Unicode环境中正确工作。
538 </p>
539
540 <note>
541 你也许还会在用Mutt阅读邮件的时候看到'?'。这是有人用的邮件客户端没有正确的指出所用的字符集。除了让他们好好配置邮件客户端之外似乎没什么别的方法了。
542 </note>
543
544 <p>
545 可以参考<uri link="http://wiki.mutt.org/index.cgi?MuttFaq/Charset">Mutt Wiki</uri>获取更多信息。
546 </p>
547
548 </body>
549 </section>
550 <section>
551 <title>Man</title>
552 <body>
553
554 <p>
555 Man是任何Linux机器都有的。为了确保man里的Unicode字符被正确渲染,文件<path>/etc/man.conf</path>中的一行需要被替换:
556 </p>
557
558 <pre caption="man.conf的Unicode支持">
559 <comment>(原始的)</comment>
560 NROFF /usr/bin/nroff -Tascii -c -mandoc
561 <comment>(替换后)</comment>
562 NROFF /usr/bin/nroff -mandoc -c
563 </pre>
564
565 </body>
566 </section>
567 <section>
568 <title>elinks和links</title>
569 <body>
570
571 <p>
572 这些是常用的基于文本的浏览器,我们看看怎么为它们打开UTF-8支持。对于<c>elinks</c>和<c>links</c>,有两个方法,使用浏览器中Setup选项设置或者直接修改配置文件。要在Setup选项中设置的话,首先用<c>elinks</c>或<c>links</c>打开一个网站,然后按<c>Alt+S</c>进入Setup菜单,再选择Terminal选项,或者按T。下拉到最后一个选项<c>UTF-8 I/O</c>并且按回车选择它。然后保存并且离开菜单。<c>links</c>中你也许需要再按一次<c>Alt+S</c>然后按<c>S</c>来保存设置。要在配置文件中改变,请看以下内容。
573 </p>
574
575 <pre caption="为elinks/links开启UTF-8">
576 <comment>(elinks的话,编辑/etc/elinks/elinks.conf或者~/.elinks/elinks.conf,
577 把下面这行加入到文件里)</comment>
578 set terminal.linux.utf_8_io = 1
579
580 <comment>(links的话,编辑~/.links/links.cfg,把下面这行加入到文件中)</comment>
581 terminal "xterm" 0 1 0 us-ascii utf-8
582 </pre>
583
584 </body>
585 </section>
586 <section>
587 <title>Samba</title>
588 <body>
589
590 <p>
591 Samba是一套为UNIX系统,如Mac,Linux和FreeBSD,而实现SMB(服务器消息块)协议的软件。这个协议有的时候也会被称作公共Internet文件系统(CIFS)。Samba也包括了NetBIOS系统——Windows网络中用来文件共享的。
592 </p>
593
594 <pre caption="为Samba开启UTF-8">
595 <comment>(编辑/etc/samba/smb.conf,把以下内容添加到[global]部分)</comment>
596 dos charset = 1255
597 unix charset = UTF-8
598 display charset = UTF-8
599 </pre>
600
601 </body>
602 </section>
603 <section>
604 <title>测试</title>
605 <body>
606
607 <p>
608 Internet有很多UTF-8测试网站的。<c>net-www/w3m</c>,<c>net-www/links</c>,<c>net-www/elinks</c>,<c>net-www/lynx</c>和所有基于Mozilla的浏览器(包括Firefox)都支持UTF-8。Konqourer和Opera也完全支持UTF-8。
609 </p>
610
611 <p>
612 当使用那些纯文本Web浏览器的时候,一定要确保所在的终端也支持Unicode。
613 </p>
614
615 <p>
616 如果你看到某些字符显示为一个小方框并且中间有字母或者数字的,那么就是说你的字体没有UTF-8想要的相应的符号或者字型。所以就用一个方框代替,并且里边是对应该字符的UTF-8的十六进制码。
617 </p>
618
619 <ul>
620 <li>
621 <uri link="http://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html">一个W3C
622 UTF-8测试页面</uri>
623 </li>
624 <li>
625 <uri link="http://titus.uni-frankfurt.de/indexe.htm?/unicode/unitest.htm">
626 一个UTF-8测试页面,由法兰克福大学提供</uri>
627 </li>
628 </ul>
629
630 </body>
631 </section>
632 <section>
633 <title>输入法</title>
634 <body>
635
636 <p>
637 <e>Dead keys</e>(在X中)可以用来输入一些不包括在你键盘上的字符。方法是按下你的右Alt键(在有的国家也叫AltGr),同时按下一个回车以左的非字母键(修改键),然后松开他们,最后按一个字母键。这样Dead key应该会修改这个字母。在按下AltGr以及修改键的时候,也可以同时按下Shift键以进一步修改输入内容。
638 </p>
639
640 <p>
641 在X中开启Deak Keys,你需要一个支持它的布局。大多数欧洲布局都默认有Dead key支持的,但是,北美布局似乎并不是这样。虽然在一定程度上不同的布局有不一致的地方,但是简单的解决方法似乎就是例如直接指定"en_US"布局而不是"us"布局。布局是在文件<path>/etc/X11/xorg.conf</path>里边设置的,就像这样:
642 </p>
643
644 <pre caption="/etc/X11/xorg.conf snippet">
645 Section "InputDevice"
646 Identifier "Keyboard0"
647 Driver "kbd"
648 Option "XkbLayout" "en_US" <comment># 而不是仅仅 "us"</comment>
649 <comment>(其他 Xkb 选项可以放这里)</comment>
650 EndSection
651 </pre>
652
653 <note>
654 如果你正使用北美布局或者一个Dead key看起来不起效的布局时才需要做之前的这个修改。欧洲用户的Deak keys应该是直接就可以用的。
655 </note>
656
657 <p>
658 这个修改要在X服务重新启动后才会生效。要是你想马上生效的话,用<c>setxkbmap</c>工具。比如<c>setxkbmap en_US</c>。
659 </p>
660
661 <p>
662 对Dead keys的描述也许通过例子是最简单的。虽然结果是根据locale而变化的,但是概念是不变的。下面的示例中的字符使用了UTF-8编码,所以你需要告诉你的浏览器用UTF-8模式浏览,或者有一个已经配置好的UTF-8 locale。
663 </p>
664
665 <p>
666 同时按下键AltGr和键[,松开,再按键a,就可以得到字符ä。同时按下键AltGr和键[,松开,再按键e,就可以得到字符ë。同时按下键AltGr和键;,松开,再按键a,就可以得到字符á。同时按下键AltGr和键;,松开,再按键e,就可以得到字符é。
667 </p>
668
669 <p>
670 同时按下键AltGr,Shift和[,松开,再按键a,得到一个北欧斯堪的纳维亚字符å。类似的,同时按下键AltGr,Shift和[,然后<e>只</e>松开[,然后再按一下[,就可以得到˚。虽然看起来很像,但是这个(U+02DA)并不是度数那个符号(U+00B0)。同理这个方法也可以用来输入dead key可以输入的其他重音符号——AltGr和[同时按,松开[,再按[就可以得到¨。
671 </p>
672
673 <p>
674 AltGr可以单独和字母键组合。比如,AltGr和m,可以组合出一个希腊小写字母mu:µ。AltGr和s组合出一个scharfes s或者esszet:ß。就像很多欧洲用户所期待(因为键盘上这么标明的)的,AltGr和4(或者E,取决于键盘布局)能输入一个欧元符号€。
675 </p>
676
677 </body>
678 </section>
679 <section>
680 <title>资源</title>
681 <body>
682
683 <ul>
684 <li>
685 <uri link="http://en.wikipedia.org/wiki/Unicode">Wikipedia上的Unicode条目</uri>
686 </li>
687 <li>
688 <uri link="http://en.wikipedia.org/wiki/UTF-8">Wikipedia上的UTF-8条目</uri>
689 </li>
690 <li><uri link="http://www.unicode.org">Unicode.org</uri></li>
691 <li><uri link="http://www.utf-8.com">UTF-8.com</uri></li>
692 <li><uri link="http://www.ietf.org/rfc/rfc3629.txt">RFC 3629</uri></li>
693 <li><uri link="http://www.ietf.org/rfc/rfc2277.txt">RFC 2277</uri></li>
694 <li>
695 <uri link="http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF">Characters vs. Bytes</uri>
696 </li>
697 </ul>
698
699 </body>
700 </section>
701 </chapter>
702 </guide>