Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       charsets - 程序员对字符集和国际化的观点

描述

       Linux  是一个国际性的操作系统。它的各种各样实用程序和设  备驱动程序  (包括控制台驱动程序 )
       支持多种语言的字符集,           包括带有附加符号的拉丁字母表字符,重音符,连字(字母结合),
       和全部非拉丁文字母表(包括希腊语,古代斯拉夫语,阿拉伯语, 和希伯来语。 )

       这份手册以程序员的眼光去看待不同的字符集标准,以及它们是如何            在           Linux
       中调和在一起的。讨论的标准包括 ASCII,ISO 8859,KOI8-R , Unicode,ISO 2022 和 ISO 4873 。

ASCII

       ASCII          (,美国国家信息交换(用)标准(代)码)           是最初的           7-bit字符集,
       原先是为美式英语设计的。当前它被 ECMA-6 标准所描述。

       在英国使用一种                           ASCII的变体(这变体是:用英国磅值的符号代替美国的
       crosshatch/octothorpe/hash                                         的磅值符号);当需要时,
       美国的(符号)和英国的变体(符号)可以用"US ASCII"和"UK ASCII" 作为区别。

       因为 Linux 是为美国设计的硬件写的, 它生来就支持 US ASCII 。

ISO 8859

       ISO  8859  是一系列  10  8-bit  字符集,它包含美国  ASCII  的低位  (7  -bit  ),  128 ~159
       范围内的不可见控制字符,和     96     个定宽图形(字符)在     160-255      里。      。LP
       这些字符集中,最重要是  ISO  8859-1  (  Latin-1  )。 它生来就被 Linux 控制台驱动程序支持,
       X11R6 的支持得也很好,并且是 HTML 的基础字符集。

       Linux  下控制台也支持其他的   8859   字符集   ,通过用户模式实用程序(   例如   setfont(8))
       来修改键盘绑定和     EGA     图形表格,    以及进行控制台驱动程序里的字体表格中的“    user
       mapping(用户影射)”。

       下面是每个集合简短的描述:

       8859-1 (Latin-1)
              Latin-1       覆盖大多数的西欧语言,比如阿尔巴尼亚,       加泰罗尼亚语,       丹麦,
              荷兰,英语,法罗群岛,芬兰,法语,德语,加利西亚,爱尔兰,冰岛,
              意大利,挪威,葡萄牙,西班牙和瑞典。缺少荷兰的   ij连字(i与j合字)    ,    法国的
              oe(o与e合字)和旧风格的',,' 而德语中``(这样的)引号是可以的。

       8859-2 (Latin-2)
              Latin-2  支持大多数的拉丁文书写的斯拉夫语和中欧的语言:  克罗地亚  ,  捷克语, 德语,
              匈牙利, 波兰,罗马尼亚,斯洛伐克, 和斯洛文尼亚。

       8859-3 (Latin-3)
              Latin-3 是世界语,加里西亚 , 马耳他人, 和土耳其语作者受欢迎的(语言)。

       8859-4 (Latin-4)
              Latin-4 介绍了爱沙尼亚语,拉托维亚,和立陶宛的字符 。它是实质上过时的; 参见 8859-10
              (Latin-6 ) 。

       8859-5 古代斯拉夫语字母支持保加利亚语,  白俄罗斯语,马其顿语,  俄语, 塞尔维亚语和乌克兰语。
              乌克兰人读带有下挑笔的`geh'为`heh',和(当)需要用带有上挑笔的                   ghe
              写正确的ghe.参见下面的(关于)KOI8-R                                       的讨论。
              (译注:这些外国人书写习惯我们也不怎么需要理解吧,希望上面的解释不要 把人搞糊涂了)

       8859-6 支持阿拉伯语。      8859-6       字型表是分离字符格式的一种固定的字体,但是一个合适
              的显示引擎应该联合这些来使用合适的词首,中间字母,和最后表格式。

       8859-7 支持现代的希腊语。

       8859-8 支持希伯来语。

       8859-9 (Latin-5)
              这是Latin-1 的一种变体,它用土耳其语的一些(字符)代替很少用的冰岛语。

       8859-10 (Latin-6)
              Latin  6  增加末因纽特(译:对于last  Inuit 我不知道是否是对的) (格陵兰语) 和 Sami (
              拉普兰语 ) ,这些是 Lattin 4  中缺少的,来覆盖整个北欧地区(的字符集)。  RFC  1345
              列出了初步的和不同的“ latin 6 "。 Skolt Sami 仍然比这些需要更多的 重音符号。

       8859-13 (Latin-7)

       8859-14 (Latin-8)

       8859-15
              增加了欧洲符号和法国连字,它们是 Latin-1 里缺漏的。

KOI8-R

       KOI8-R   是在俄国流行的一个非   ISO  字符集。下半部分是  US  ASCII;  上部是比  ISO  8859-5
       设计的更好的古斯拉夫字符集。

       控制台为了支持 KOI8-R 字符集,在  Linux  下,  可以利用用户模式实用程序修改键盘绑定和  EGA
       图形表格, 以及在控制台的驱动程序中使用字体表“user mapping(用户映射)”。

UNICODE(统[单]一代码,宽[双]字节字符集)

       Unicode(          ISO          10646          )          是一个标准,它的目标是明白地表现
       在每种人类语言中的每种已知字符。Unicode 的编码是 32 位的 ( 旧些的版本使用了 16 位  )  。在
       Unicode 的一些信息可以在<http://www.unicode.com>获得。

       Linux  使用8位的  Unicode  转移格式  (UTF-8  )  表示  Unicode 。 UTF-8 是可变长的 Unicode
       编码。使用1个字节给 7 bit 编码,使用2个字节给 11 bit 编码,  使用3个字节给  16  bit
       编码,使用4个字节给  21 bit 编码,使用5个字节给 26 bit 编码,使用6个字节给 31 bit
       编码

       让 0,1 , x 代表零,一,或任意的位。字节0xxxxxxx 代表Unicode 00000000 0xxxxxxx, 这个符号和
       ASCII   0xxxxxxx   编码的符号是一样。   这样,   ASCII   没有改为   UTF-8,并且只用  ASCII
       的人不会注意到任何变化: 不在代码,并且不在文件大小。

       字节 110xxxxx 是一个2 字节代码的开始, 110xxxxx 10yyyyyy 组装成 00000xxx xxyyyyyy 。  字节
       1110xxxx   是一个   3  字节代码的开始,  1110xxxx  10yyyyyy  10zzzzzz  被组装成  xxxxyyyy
       yyzzzzzz。 (如果 UTF-8 使用 31-bit ISO 10646 编码,那么这个级数就会延伸 到 6 字节编码)

       对于              ISO-8859-1              的用户而言,这意味着带高位的字符编码成两个字节。
       这会令普通的文本文件增大1到2个百分点。不过没有变换问题,    因为    Unicode    ISO-8859-1
       符号的值等于他们的        ISO-8859-1        值        (用        8         个前导零做前缀)
       。对于日语的用户,这意味着原来常用的           16          位编码将          占          3
       个字节,并且还要求有扩展的映射表。许多日本人因此比较喜欢 ISO 2022 。

       注意 UTF-8 是自我同步的: 10xxxxxx 是一条尾巴, 任何其它 的字节是编码的头。ASCII 字节出现在
       UTF-8     流中唯一的可能是     作为自己出现。特别是,     不会有     NULs    或    "    /'s
       嵌入在那些比较大的编码中。

       因为编码中的   ASCII,特别是,   NUL    和'/',    没有变化,    所以内核不会注意到    在使用
       UTF-8。它根本不在乎它正在处理的那字节代表什么东西。

       Unicode       数据流的呈现通常是通过"       subfont       "表来操作,这个表是      Unicode
       的一个子集到字符表格的映射。内核内部使用 Unicode 描述装载入显示内存的  subfont。这意味着在
       UTF-8   中的一个模式   能使用   512   个不同的符号。这对于日语,汉语和朝鲜语来说是不够的,
       但是它满足了大多数其它用途。

ISO 2022 AND ISO 4873

       ISO 2022 和 4873 标准描述了一个基于 VT100 实现的字体控制模型. Linux 内核和  xterm  (1)  (
       部分 ) 支持这个模型。 它在日本和韩国很流行。

       它有  4  个图形的字符集,称为  G0  ,  G1  ,  G2  和  G3  ,并且 其中之一是当前的高位为0
       的编码的字符集(最初     G0     ),而他们之     一是当前的高位为1的编码的字符集(最初     G1
       )。每种图形的字符集有 94 或 96 个字符 ,并且是实际上是一个 7-bit字符集。 它使用 040-0177 (
       041-0176 ) 或 0240-0377 ( 0241-0376 )编码 中的一个。G0  大小总是为  94,并且使用  041-0176
       之间的编码。

       字符之间切换用转换(shift functions)功能 ^N (SO 或 LS1), ^O (SI 或 LS0), ESC n (LS2), ESC
       o (LS3), ESC N (SS2), ESC O (SS3), ESC  ~  (LS1R),  ESC  }  (LS2R),  ESC  |  (LS3R).   LSn
       把字符集Gn标记为当前字符集,用于高位为0的编码。               LSnR               把字符集
       Gn标记为当前字符集,用于高位为1的编码。 SSn  把字符集Gn  (n=2  or  3)  标记为当前字符集,
       只用于下一个字符( 不管它的高位的值是什么)

       94  字符的集合用做  Gn 字符集是用一个逃逸序列 ESC ( xx (用于 G0),ESC ) xx (用于 G1),
       ESC * xx (用于 G2),ESC + xx (用于 G3),等代表的.这里的 xx  是一个符号  或者是在  ISO
       2375  国际注册编码字符集中的一对符号。  例如,ESC  ( @ 选用 ISO 646 字符集作为GO, ESC ( A
       选用 UK 标准字符集(用磅代替数字记号), ESC ( B 选择 ASCII ( 用美元代替流通货币),  ESC  (  M
       为非洲语言选择一个字符集, ESC ( ! A 选择古巴字符集, 等等. 等等.

       94  字符的集合用做 Gn 字符集是用一个逃逸序列 ESC - xx (对于 G1), ESC . xx (对于 G2) 或
       ESC / xx (对于 G3)等表示. 例如, ESC - G 选择希伯莱字母表作为 G1.

       多字节的字符集用做 Gn 字符集是用一个逃逸序列 ESC $ xx 或者 ESC $ ( xx (对于 G0), ESC  $
       ) xx (对于 G1),ESC $ * xx (对于 G2),ESC $ + xx (对于 G3)等来表示. 例如, ESC $ ( C
       为 G0选择韩国字符集.  日本字符集合由 ESC $ B选择 更多临近的版本由ESC & @ ESC $ B选择.

       ISO 4873 规定了一个范围比较窄的使用字符集,它的 G0是固定的 (总是 ASCII), 所以  G1,  G2  和
       G3只能被调用于高次序位编码集。  尤其是,不再使用  ^N 和 ^O,ESC ( xx 仅用于 xx=B, 和 ESC )
       xx, ESC * xx, ESC + xx 分别等价于 ESC - xx, ESC . xx, ESC / xx.

参考

       console(4),  console_ioctl(4),  console_codes(4),  ascii(7),  iso_8859_1(7),   unicode(7),
       utf-8(7)

[中文版维护人]

       Scorpio <rawk@chinese.com>

[中文版最新更新]

       2000/10/23

《中国linux论坛man手册页翻译计划》:

       http://cmpp.linuxforum.net

       本页面中文版由中文 man 手册页计划提供。
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh