第一章 基础知识
1.1 介绍 1.1.1 iso8859-1
属于单字节编码,最多能表示的字符范围是 0-255,应用于英文系列。比如,字母 a 的编码 为 0x61=97。 ISO 8859-1 ,即俗称的 latin-1,西欧字母。其中前半段是 ASCII 码。 很明显,iso8859-1 编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编 码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用 iso8859-1 编码来表示。而 且在很多协议上, 默认使用该编码。 比如, 虽然"中文"两个字不存在 iso8859-1 编码, gb2312 以 编码为例,应该是"d6d0 cec4"两个字符,使用 iso8859-1 编码的时候则将它拆开为 4 个字节 来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的) 。而如果是 UTF 编码,则是 6 个字节"e4 b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为 基础。
1.1.2 GB 系列
GB 系列这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和 iso8859-1 一致(兼容 iso8859-1 编码) 。其中 gbk 编码能够用来同时表示繁体字和简体字, 而 gb2312 只能表示简体字,gbk 是兼容 gb2312 编码的。 GB2312-80 是在国内
计算机汉字信息技术发展初始阶段制定的, 其中包含了大部分常用 的一、二级汉字,和 9 区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持 的中文字符集,这也是最基本的中文字符集。其编码范围是高位 0xa1-0xfe,低位也 是 0xa1-0xfe;汉字从 0xb0a1 开始,结束于 0xf7fe; GBK 是 GB2312-80 的扩展,是向上兼容的。它包含了 20902 个汉字,其编码范围 是 0x8140-0xfefe, 剔除高位 0x80 的字位。 其所有字符都可以一对一映射到 Unicode 2.0, 也就是说 JAVA 实际上提供了 GBK 字符集的支持。 这是现阶段 Windows 和其它一些中文操 作系统的缺省字符集, 但并不是所有的国际化软件都支持该字符集, 感觉是他们并不完全知 道 GBK 是怎么回事。值得注意的是它不是国家标准,而只是规范。随着 GB18030-2000 国 标的发布,它将在不久的将来完成它的历史使命。 GB18030-2000(GBK2K) 在 GBK 的基础上进一步扩展了汉字,增加了藏、蒙等少数民族 的字形。GBK2K 从根本上解决了字位不够,字形不足的问题。它有几个特点: 1、 它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。 2、 编码是变长的,其二字节部分与 GBK 兼容;四字节部分是扩充的字形、字位,其编码 范围是首字节 0x81-0xfe、二字节 0x30-0x39、三字节 0x81-0xfe、四字节 0x30-0x39。 3、 它的推广是分阶段的,首先要求实现的是能够完全映射到 Unicode 3.0 标准的所有字
形。 4、 它是国家标准,是强制性的。 5、 现在还没有
任何一个操作系统或
软件实现了 GBK2K 的支持,这是现阶段和将来汉化的
工作内容
1.1.3 unicode
这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编 码,包括英文字母在内。所以可以说它是不兼容 iso8859-1 编码的,也不兼容任何编码。不 过,相对于 iso8859-1 编码来说,uniocode 编码只是在前面增加了一个 0 字节,比如字母 a 为"00 61"。 需要说明的是,定长编码便于计算机处理(注意 GB2312/GBK 不是定长编码) ,而 unicode 又可以用来表示所有字符,所以在很多软件内部是使用 unicode 编码来处理的,比如 java。 ISO 10646, 即通用字符集(Universal Character Set, UCS),四个字节编码 UCS 标准 (ISO 10646) 描述了一个 31 位字符集的体系, 不过, 目前只使用了前面 65534 个 编 码 位 置 (0x0000-0xfffd, 它 们 被 称 为 基 本 多 语 言 块 (Basic Multilingual Plane,BMP)), 分配给了字符, 而且我们估计只有那些很古怪的字符(比如. Hieroglyphics) 为了专门的科学目的, 才会在将来的某个时候, 需要 16 位的 BMP 之外的部分. Unicode 编码头 256 个字符和 ISO8559-1 一