转自 Donews Blog [ http://www.donews.net ]
-------------------------------

Unicode:

unicode.org定制的编码机制, 要将全世界常用文字都函括进去.
在1.0中是16位编码, 由U 0000到U FFFF. 每个2byte码对应一个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平面, 另外增加了16个位平面, 相当于20位编码, 编码范围0到0x10FFFF.

UCS:

ISO定制的ISO10646标准所定义的 Universal Character Set, 采用4byte编码.

Unicode和UCS的关系:

ISO 和unicode.org是两个不同的组织, 因此最初定制了不同的标准; 但自从unicode2.0开始, unicode采用了和ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持一致.

UCS的编码方式:

# UCS-2, 和unicode的2byte编码基本相同.
# UCS-4, 4byte编码, 现在是在UCS-2前加上2个全零的byte.

UTF: Unicode/UCS Transformation Format
# UTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下长处:
* 和CPU字节顺序无关, 能够在不同平台之间交流
* 容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)
# UTF-16, 16bit编码, 是变长码, 大致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 他是变长码, 和CPU字序有关, 但因为最省空间, 常作为网络传输的外码.
UTF-16是unicode的preferred encoding.
# UTF-32, 仅使用了unicode范围(0到0x10FFFF)的32位编码, 相当于UCS-4的子集.

UTF和unicode的关系:

Unicode是个字符集, 能够看作为内码.
而UTF 是一种编码方式, 他的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但他包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特别意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换能够避免这问题, 并带来一些长处.

中国国标编码:
# GB 13000: 完全等同于ISO 10646-1/Unicode 2.1, 今后也将随ISO 10646/Unicode的标准更改而同步更改.
# GBK: 对GB2312的扩充, 以容纳GB2312字符集范围以外的Unicode 2.1的统一汉字部分, 并且增加了部分unicode中没有的字符.
# GB 18030-2000: 基于GB 13000, 作为Unicode 3.0的GBK扩展版本, 覆盖了任何unicode编码, 地位等同于UTF-8, UTF-16, 是一种unicode编码形式. 变长编码, 用单字节/双字节/4字节对字符编码. GB18030向下兼容GB2312/GBK.
GB 18030是中国任何非手持/嵌入式电脑系统的强制实施标准.

-------------------------------

什么是 UCS 和 ISO 10646?

国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 是任何其他字符集标准的一个超集. 他确保和其他字符集是双向兼容的. 就是说, 假如您将任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 您不会丢失任何信息.

UCS 包含了用于表达任何已知语言的字符. 不但包括拉丁语,希腊语, 斯拉夫语,希伯来语,阿拉伯语,亚美尼亚语和乔治亚语的描述, 还包括中文, 日文和韩文这样的象形文字, 连同 平假名, 片假名, 孟加拉语, 旁遮普语果鲁穆奇字符(Gurmukhi), 泰米尔语, 印.埃纳德语(Kannada), Malayalam, 泰国语, 老挝语, 汉语拼音(Bopomofo), Hangul, Devangari, Gujarati, Oriya, Telugu 连同其他数也数不清的语. 对于还没有加入的语言, 由于正在研究怎样在电脑中最好地编码他们, 因而最终他们都将被加入. 这些语言包括 Tibetian, 高棉语, Runic(古代北欧文字), 埃塞俄比亚语, 其他象形文字, 连同各种各样的印-欧语系的语言, 还包括挑选出来的艺术语言比如 Tengwar, Cirth 和克林贡语(Klingon). UCS 还包括大量的图像的, 印刷用的, 数学用的和科学用的符号, 包括任何由 TeX, Postscript, MS-DOS,MS-Windows, Macintosh, OCR 字体, 连同许多其他字处理和出版系统提供的字符.

ISO 10646 定义了一个 31 位的字符集. 然而, 在这巨大的编码空间中, 迄今为止只分配了前 65534 个码位 (0x0000 到 0xFFFD). 这个 UCS 的 16位子集称为 基本多语言面 (Basic Multilingual Plane, BMP). 将被编码在 16 位 BMP 以外的字符都属于很特别的字符(比如象形文字), 且只有专家在历史和科学领域里才会用到他们. 按当前的计划, 将来也许再也不会有字符被分配到从 0x000000 到 0x10FFFF 这个覆盖了超过 100 万个潜在的未来字符的 21 位的编码空间以外去了. ISO 10646-1 标准第一次发表于 1993 年, 定义了字符集和 BMP 中内容的架构. 定义 BMP 以外的字符编码的第二部分 ISO 10646-2 正在准备中, 但也许要过好几年才能完成. 新的字符仍源源不断地加入到 BMP 中, 但已存在的字符是稳定的且不会再改变了.

UCS 不但给每个字符分配一个代码, 而且赋予了一个正式的名字. 表示一个 UCS 或 Unicode 值的十六进制数, 通常在前面加上 "U ", 就象 U 0041 代表字符"拉丁大写字母A". UCS 字符 U 0000 到 U 007F 和 US-ASCII(ISO 646) 是一致的, U 0000 到 U 00FF 和 ISO 8859-1(Latin-1) 也是一致的. 从 U E000 到 U F8FF, 已 BMP 以外的大范围的编码是为私用保留的.
什么是组合字符?

UCS里有些编码点分配给了 组合字符.他们类似于打字机上的无间隔重音键. 单个的组合字符不是个完整的字符. 他是个类似于重音符或其他指示标记, 加在前一个字符后面. 因而, 重音符能够加在任何字符后面. 那些最重要的被加重的字符, 就象普通语言的正字法(orthographies of common languages)里用到的那种, 在 UCS 里都有自己的位置, 以确保同老的字符集的向后兼容性. 既有自己的编码位置, 又能够表示为一个普通字符跟随一个组合字符的被加重字符, 被称为预作字符(precomposed characters). UCS 里的预作字符是为了同没有预作字符的旧编码, 比如 ISO 8859, 保持向后兼容性而设的. 组合字符机制允许在任何字符后加上重音符或其他指示标记, 这在科学符号中特别有用, 比如数学方程式和国际音标字母, 可能会需要在一个基本字符后组合上一个或多个指示标记.

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!