组合字符跟随着被修饰的字符. 比如, 德语中的元音变音字符 ("拉丁大写字母A 加上分音符"), 既能够表示为 UCS 码 U 00C4 的预作字符, 也能够表示成一个普通 "拉丁大写字母A" 跟着一个"组合分音符":U 0041 U 0308 这样的组合. 当需要堆叠多个重音符, 或在一个基本字符的上面和下面都要加上组合标记时, 能够使用多个组合字符. 比如在泰国文中, 一个基本字符最多可加上两个组合字符.
什么是 UCS 实现级别?
不是任何的系统都需要支持象组合字符这样的 UCS 里任何的先进机制. 因此 ISO 10646 指定了下列三种实现级别:
级别1
不支持组合字符和 Hangul Jamo 字符 (一种特别的, 更加复杂的韩国文的编码, 使用两个或三个子字符来编码一个韩文音节)
级别2
类似于级别1, 但在某些文字中, 允许一列固定的组合字符 (例如, 希伯来文, 阿拉伯文, Devangari, 孟加拉语, 果鲁穆奇语, Gujarati, Oriya, 泰米尔语, Telugo, 印.埃纳德语, Malayalam, 泰国语和老挝语). 假如没有这最起码的几个组合字符, UCS 就不能完整地表达这些语言.
级别3
支持任何的 UCS 字符, 例如数学家能够在任意一个字符上加上一个 tilde(颚化符号,西班牙语字母上面的~)或一个箭头(或两者都加).
什么是 Unicode?
历史上, 有两个单独的, 创立单一字符集的尝试. 一个是国际标准化组织(ISO)的 ISO 10646 项目, 另一个是由(一开始大多是美国的)多语言软件制造商组成的协会组织的 Unicode 项目. 幸运的是, 1991年前后, 两个项目的参和者都认识到, 世界无需两个不同的单一字符集. 他们合并双方的工作成果, 并为创立一个单一编码表而协同工作. 两个项目仍都存在并单独地公开各自的标准, 但 Unicode 协会和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地一起调整任何未来的扩展.
那么 Unicode 和 ISO 10646 不同在什么地方?
Unicode 协会公开的 Unicode 标准 严密地包含了 ISO 10646-1 实现级别3的基本多语言面. 在两个标准里任何的字符都在相同的位置并且有相同的名字.
Unicode 标准额外定义了许多和字符有关的语义符号学, 一般而言是对于实现高质量的印刷出版系统的更好的参考. Unicode 周详说明了绘制某些语言(比如阿拉伯语)表达形式的算法, 处理双向文字(比如拉丁和希伯来文混合文字)的算法和 排序和字符串比较 所需的算法, 连同其他许多东西.
另一方面, ISO 10646 标准, 就象广为人知的 ISO 8859 标准相同, 只但是是个简单的字符集表. 他指定了一些和标准有关的术语, 定义了一些编码的别名, 并包括了规范说明, 指定了怎样使用 UCS 连接其他 ISO 标准的实现, 比如 ISO 6429 和 ISO 2022. 更有一些和 ISO 紧密相关的, 比如 ISO 14651 是关于 UCS 字符串排序的.
考虑到 Unicode 标准有一个易记的名字, 且在任何好的书店里的 Addison-Wesley 里有, 只花费 ISO 版本的一小部分, 且包括更多的辅助信息, 因而他成为使用广泛得多的参考也就不足为奇了. 然而, 一般认为, 用于打印 ISO 10646-1 标准的字体在某些方面的质量要高于用于打印 Unicode 2.0的. 专业字体设计者总是被建议说要两个标准都实现, 但一些提供的样例字形有显著的区别. ISO 10646-1 标准同样使用四种不同的风格变体来显示表意文字如中文, 日文和韩文 (CJK), 而 Unicode 2.0 的表里只有中文的变体. 这导致了普遍的认为 Unicode 对日本用户来说是不可接收的传说, 尽管是错误的.
什么是 UTF-8?
首先 UCS 和 Unicode 只是分配整数给字符的编码表. 现在存在好几种将一串字符表示为一串字节的方法. 最显而易见的两种方法是将 Unicode 文本存储为 2 个 或 4 个字节序列的串. 这两种方法的正式名称分别为 UCS-2 和 UCS-4. 除非另外指定, 否则大多数的字节都是这样的(Bigendian convention). 将一个 ASCII 或 Latin-1 的文档转换成 UCS-2 只需简单地在每个 ASCII 字节前插入 0x00. 假如要转换成 UCS-4, 则必须在每个 ASCII 字节前插入三个 0x00.
在 Unix 下使用 UCS-2 (或 UCS-4) 会导致很严重的问题. 用这些编码的字符串会包含一些特别的字符, 比如 '' 或 '/', 他们在 文档名和其他 C 库函数参数里都有特别的含义. 另外, 大多数使用 ASCII 文档的 UNIX 下的工具, 假如不进行重大修改是无法读取 16 位的字符的. 基于这些原因, 在文档名, 文本文档, 环境变量等地方, UCS-2 不适合作为 Unicode 的外部编码.
在 ISO 10646-1 Annex R 和 RFC 2279 里定义的 UTF-8 编码没有这些问题. 他是在 Unix 风格的操作系统下使用 Unicode 的明显的方法.
UTF-8 有一下特性:
* UCS 字符 U 0000 到 U 007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文档在 ASCII 和 UTF-8 两种编码方式下是相同的.
* 任何 >U 007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.
* 表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步很容易, 并使编码无国界, 且很少受丢失字节的影响.
* 能够编入任何可能的 231个 UCS 代码
* UTF-8 编码字符理论上能够最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.
* Bigendian UCS-4 字节串的排列顺序是预定的.
* 字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.
下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具备越少的特别意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




