UNICODE - Linux手册页
Linux程序员手册 第7部分
更新日期: 2020-08-13
名称
unicode-通用字符集
说明
国际标准ISO 10646定义了通用字符集(UCS)。 UCS包含所有其他字符集标准的所有字符。它还保证了"往返兼容性";换句话说,可以将转换表构建为在将字符串从任何其他编码转换为UCS并转换回UCS时不会丢失任何信息。
UCS包含代表几乎所有已知语言所需的字符。这不仅包括拉丁文,希腊文,西里尔文,希伯来文,希伯来文,阿拉伯文,亚美尼亚文和格鲁吉亚文,而且还包括中文,日文和韩文的汉字表意文字以及诸如平假名,片假名,韩文,梵文,孟加拉语,古尔穆奇语,古吉拉特语,奥里亚语,泰米尔语,泰卢固语,卡纳达语,马拉雅拉姆语,泰语,老挝语,高棉语,Bopomofo,藏语,符文语,埃塞俄比亚语,加拿大音节,切诺基语,蒙古语,奥格姆,缅甸,僧伽罗语,塔阿纳语,彝语等。对于尚未涵盖的脚本,仍在研究如何对它们进行最佳编码以供计算机使用,最终将对其进行添加。这最终可能不仅包括象形文字和各种历史性的印欧语系语言,而且甚至包括一些精选的艺术剧本,例如Tengwar,Cirth和Klingon。 UCS还涵盖了大量图形,印刷,数学和科学符号,包括TeX,Postscript,APL,MS-DOS,MS-Windows,Macintosh,OCR字体以及许多文字处理和发布系统提供的符号,以及更多。
UCS标准(ISO 10646)描述了一种31位字符集体系结构,该体系结构由128个24位组组成,每个组分为256个16位平面,这些平面由256个8位行和256个列位置组成,每个字符一个。标准(ISO 10646-1)的第1部分定义了开头的65534代码位置(0x0000至0xfffd),这些位置形成了基本多语言平面(BMP),即第0组中的平面0。标准的第2部分(ISO 10646- 2)在0x10000到0x10ffff范围内的几个补充平面中,将字符添加到BMP之外的组0。没有计划将超出0x10ffff的字符添加到标准,因此在整个代码空间中,在可预见的将来,只有第0组的一小部分会被实际使用。 BMP包含在其他常用字符集中找到的所有字符。 ISO 10646-2所添加的补充平面仅涵盖了特殊科学,词典印刷,出版行业,更高级别的协议和发烧友需要的更多异国字符。
将每个UCS字符表示为2字节的字称为UCS-2格式(仅用于BMP字符),而UCS-4是每个字符用4字节字的表示。此外,还存在两种编码形式:UTF-8(用于与ASCII处理软件向后兼容)和UTF-16(用于通过UCS-2软件向后兼容处理最大0x10ffff的非BMP字符)。
UCS字符0x0000至0x007f与经典US-ASCII字符集的字符相同,范围0x0000至0x00ff的字符与ISO 8859-1(Latin-1)中的字符相同。
Combining characters
UCS中的某些代码点已分配给组合字符。这些类似于打字机上不带空格的重音键。组合字符只是在前一个字符上加重音。最重要的重音字符在UCS中具有自己的代码,但是,组合字符机制使我们可以向任何字符添加重音和其他变音标记。组合字符始终跟随其修改的字符。例如,德语字符Umlaut-A("带有大写字母的拉丁大写字母A")可以由预先组成的UCS代码0x00c4表示,也可以由普通的"拉丁大写字母A"加上"组合小写字母"来表示":0x0041 0x0308。
组合字符对于例如编码泰语脚本或进行数学排版以及使用国际语音字母至关重要。
Implementation levels
由于并非所有系统都希望支持诸如字符组合之类的高级机制,因此ISO 10646-1指定了以下三个UCS实现级别:
- Level 1
- 不支持将字符和韩文Jamo(韩语脚本的一种变体编码,将韩文音节字形编码为三元组或一对元音/辅音代码)组合使用。
- Level 2
- 除了第1级外,现在还允许某些必不可少的语言(例如泰语,老挝语,希伯来语,阿拉伯语,梵文,马拉雅拉姆语)使用组合字符。
- Level 3
- 支持所有UCS字符。
Unicode联合会发布的Unicode 3.0标准完全包含实施级别3的UCS基本多语言平面,如ISO 10646-1:2000中所述。 Unicode 3.1添加了ISO 10646-2的补充平面。 Unicode联盟发布的Unicode标准和技术报告提供了有关各种字符的语义和推荐用法的许多其他信息。它们提供了用于编辑,排序,比较,规范化,转换和显示Unicode字符串的准则和算法。
Unicode under Linux
在GNU / Linux下,C类型wchar_t是带符号的32位整数类型。 C库始终将其值解释为UCS代码值(在所有语言环境中),这是GNU C库通过定义ISO C99标准中指定的常量__STDC_ISO_10646__向应用程序传达的一种约定。
UCS / Unicode可以像ASCII一样在输入/输出流,终端通信,明文文件,文件名和环境变量中以ASCII兼容的UTF-8多字节编码使用。为了向所有应用程序发出使用UTF-8作为字符编码的信号,必须通过环境变量(例如" LANG = en_GB.UTF-8")选择合适的语言环境。
nl_langinfo(CODESET)函数返回所选编码的名称。诸如wctomb(3)和mbsrtowcs(3)之类的库函数可用于将内部wchar_t字符和字符串转换为系统字符编码,然后back和wcwidth(3)告知光标前进了多少个位置(0-2)通过字符的输出。
Private Use Areas (PUA)
在基本多语言平面中,标准不会将范围0xe000到0xf8ff分配给任何字符,并且保留供私人使用。对于Linux社区,此私有区域被进一步细分为0xe000到0xefff范围,任何最终用户都可以单独使用它,而Linux区域的范围在0xf000到0xf8ff范围内,扩展在所有Linux用户之间进行协调。分配给Linux区域的字符的注册表由LANANA维护,并且注册表本身在Linux内核源代码中为Documentation / admin-guide / unicode.rst(或在Linux 4.10之前的Documentation / unicode.txt)。
保留了两个其他平面供私人使用:平面15(补充专用区域-A,范围0xf0000至0xffffd)和平面16(补充专用区域-B,范围0x100000至0x10fffd)。
Literature
- *
- 信息技术---通用多八位编码字符集(UCS)---第1部分:体系结构和基本多语言平面。国际标准ISO / IEC 10646-1,国际标准化组织,日内瓦,2000年。
- 这是UCS的官方规范。可从
- *
- Unicode标准版本3.0。 Unicode协会,Addison-Wesley,雷丁,MA,2000,ISBN 0-201-61633-5。
- *
- S. Harbison,G。Steele。 C:参考手册。第四版,Prentice Hall,Englewood Cliffs,1995年,ISBN 0-13-326224-3。
- 关于C编程语言的优秀参考书。第四版涵盖了1994年对ISO C90标准的修订版1,该修订版添加了大量用于处理宽和多字节字符编码的新C库函数,但尚未涵盖ISO C99,后者进一步改进了对宽和多字节字符的支持。
- *
- Unicode Technical Reports.
- *
- Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
- *
- Bruno Haible: Unicode HOWTO.
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。