国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 包含所有别的字符集标准里的字符,并且保证了 互换兼容性 (round-trip compatibility), 也就是说,当一个字符串在 UCS 和任何别的字符集之间转换时, 转换表可以保证不会有信息丢失现象发生.
UCS 包含了表示几乎所有已知的语言所必需的字符.该字符集既包括那些使用扩展拉丁语的语言,也包括下面的这些语言: Greek, Cyrillic, Hebrew,Arabic, Armenian, Gregorian, Japanese, Chinese, Hiragana, Katakana, Korean, Hangul, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, alayam, Thai, Lao, Bopomofo,等等.而另外的语言,例如 Tibetian, Khmer, Runic, Ethiopian, Hieroglyphics, 各种 Indo-European 语言, 还有许多其他的语言, 正在被加入其中.1993 年发布该标准的时候, 还不清楚怎样才能对后面加入的这些语言中的大部分作更好的编码. 另外, 这些语言所需的字符, 以及由 TeX, PostScript, MS-DOS, Macintosh, Videotext, OCR, 还有很多字处理系统所提供的大量的图形, 印刷体, 数学和科学符号, 都已被包括进来, 还包括了一些特别编码以保证和所有其它已存在字符集标准的可逆转换兼容性.
UCS 标准 (ISO 10646) 描述了一个 31 位字符集的体系, 不过, 目前只使用了前面 65534 个编码位置 (0x0000-0xfffd, 它们被称为 基本多语言块 (Basic Multilingual Plane,BMP)), 分配给了字符, 而且我们估计只有那些很古怪的字符(比如. Hieroglyphics)为了专门的科学目的, 才会在将来的某个时候, 需要 16 位的 BMP 之外的部分.
从 0x0000 到 0x007f 之间的 UCS 字符和经典 US-ASCII 字符集是一样的, 而从 0x0000 到 0x00ff 之间的字符等于 ISO 8859-1 Latin-1 字符集.
一些 UCS 编码被分配给了 组合字符(combining characters). 这样的情形有点类似于打字机上的重音键. 一个组合字符只是给前面的字符添加一个重音. 在 UCS 里最重要的重音字符都有他们自己的编码, 不过, 组合字符机制允许给任一字符添加重音和其他的可识别记号. 组合字符总是跟在那些他们所修饰的字符后面. 例如,德语符号 Umlaut-A (带分音符的大写拉丁字母 A)既可以表示为 UCS 编码 0x00c4, 也可以用一个正常的"大写拉丁字母 A"后面跟一个"组合分音符号": 0x0041 0x0308 来表示.
由于不是所有系统都支持象组合字符这样的高级机制, ISO 10646 指明了 UCS 的三种实现级别:
Unicode 协会发布的 Unicode 1.1 标准和 ISO 10646 所描述的那样, 在第 3 执行级别只包括了 UCS (基本多语言块 Basic Multilingual Plane). Unicode 1.1 还为一些 ISO 10646 的字符定义加入了一些语义定义.
在 Linux 下, 为了降低组合字符的实现复杂性, 目前只包括了执行级别 1 下的 BMP. 更高的执行级别更适合于专门的字处理格式, 而不是一个普通的系统字符集. 在 linux 下 C 的类型 wchar_t 是一个有符号位的 32 位整型并且其值解释为 UCS4 编码.
本地化设置指明系统字符编码是使用诸如 UTF-8 还是 ISO 8859-1这样的编码. 象库函数 wctomb, mbtowc, 或者 wprintf 就可以用于内部 wchar_t 字符及字符串与系统字符编码之间做转换.
在 BMP 里, 0xe000 到 0xf8ff 的范围被标准保留做私用因而永远不会被分配给任何字符. 对于 Linux 社区, 该私有区被再细分为可以被任何终端用户独立使用的 0xe000 到 0xefff 的范围, 以及从 0xf000 到 0xf8ff 给所有 linux 用户所共用的 linux 区.H. Peter Anvin(<Peter.Anvin@linux.org>, Yggdrasil Computing,Inc) 现在维护登记分配到 linux 区的字符. 该区包括一些 Unicode 中缺少的 DEC VT100 的图形字符, 这使控制台的字体缓冲区可以直接获得这些字符, 该区还包括一些象 Klingon 这样的古老语言所使用的字符.
这是 UCS 的正式规范, 非常正式, 也很厚, 还非常贵. 如果要定购信息, 去看看 www.iso.ch.
Unicode 已经有 1.1.4 版可用,与 1.0 版的差别可以在 ftp.unicode.org 找到. Unicode 2.0 也将在 1996 年出版一本书.
一本很好的 C 语言编程参考书. 现在的第四版包含了 1994 年对标准 ISO C 的第一次修正 (ISO/IEC 9899:1990), 添加了大量处理多种字符集的新的 C 库函数.
原文:https://www.cnblogs.com/fanweisheng/p/11101857.html