Unicode,ISO-10646,UTF8编码技术
什么是Unicode?
接触过电脑的朋友或多或少都碰到过乱码的问题,比如说在繁体系统下浏览一个简体或日文的网站, 显示的是一堆看不懂的中文字,为什么会这样呢?
那是因为现在的中日韩内码都是使用2个bytes来表示一个字符,由于各有各的编码方式,所以就会出现冲突,例如:0xBBAF在Big5码下表示"赵"字,但在GB码下却表示"化"字,所以一旦没选好编码,就会出现一堆看不懂的天书.
Unicode就是为了解决这种问题而产生的,它是以2bytes为一单位,为全世界各种文字给定一个唯一的编码,这样就可以避免各种编码方 案间产生冲突,从而杜绝乱码的产生,也就是说用一种编码就可以容纳世界各种文字,这不但有利于讯息的交流,也有利于编写支持多语言的程序.
Unicode是以2Bytes即16bits来表示一个字符,即共可表达65535个不同的字符,现在最新版本是3.2.0 (2002年3月发布),4.0将于2003年9月公布。
以中文为例,现在Unicode中的跟中日韩表意字符(CJK Ideograph)有关的编码范围是:
0x4e00 至 0x9fa5 共20902个字
0xf900 至 0xfa2d 共302个字 (扩展区)
什么是ISO-10646?
ISO-10646的目的和原理跟Unicode差不多,都是以多字节来表示一个字符,藉此为全世界的文字符号给定一个唯一的编码。ISO-10646是由国际标准化组织(ISO)制订,而Unicode则由Unicode组织制订。
ISO-10646定义的字集称为Universal Character Set(UCS),包括UCS2和UCS4,前者以2bytes(16bits) 为一单位,编码空间共65535个字符,而后者则以4bytes(32bits)为一单位,编码空间高达2,147,483,647!!足可以把古今中外 人类用过的所有文字符号收录其中!
ISO和Unicode组织间已取得共识,故UCS2和Unicode的编码内容是一样,互相兼容且互相同步化,所以现在Unicode和UCS2可看成是同义词。
什么是UTF8?
UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:
以"I am Chinese"为例
用ANSI储存:12 Bytes
用Unicode/UCS2储存:24 Bytes + 2 Bytes(header)
用UCS4储存:48 Bytes + 4 Bytes(header)
以"我是中国人"为例
用ANSI储存:10 Bytes
用Unicode/UCS2储存:10 Bytes + 2 Bytes(header)
用UCS4储存:20 Bytes + 4 Bytes(header)
由此可见直接以Unicode/UCS的原始形式来储存是一种极大的浪费,而且也不利于互联网的传输(中文稍为合算一点^_^)。
有见及此,Unicode/UCS的压缩形式--UTF8出现了,套用官方网站的首句话『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也适用于编码UCS,故亦可称为『UCS transformation formats (UTF)』
UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。
什么是Big5码?
Big5码是港澳台等使用繁体中文地区最通用的中文编码,是1984年台湾资讯工业策进会根据《通用汉字标准交换码》制订的编码方案。为什么会叫大五码呢?好像是此方案跟当初五大台湾电脑公司有关,故名「大五码」。
每个Big5码由2 Bytes组成,高位元组0x81~0xFE,低位元组0x40~0x7E和0xA1-0xFE,包括:
常用字 (A440-C67E) 共5401个字
次常用字 (C940-F9FE) 共7652个字
特殊符号一 (A140-A3BF) 共408个字
特殊符号二 (C6A1-C8FE) 共408个字
两段汉字均基本以笔划数排序
什么是GB码?
GB码全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年由大陆有关部门发布,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。
每个GB码由2 Bytes组成,范围A1A1~FEFE
A1-A9:符号区,包含682个符号
B0-F7:汉字区,包含6763个汉字
其中汉字部分以常用程度分为两级:一级字3755,以拼音排序,二级字3008,以偏旁排序。
什么是GBK码?
由于GB2312-1980码收录的汉字只有六千多个,有很多人名地名繁体异体古体字都没有被收录,使用上十分不便,故有关部门于1995年制订了GBK码,中文名叫《汉字内码扩展规范1.0版》,向下兼容GB2312 码。
每个GBK码由2 Bytes组成,范围8140~FEFE(除外xx7F),共23940个字,其中汉字有21003个,包含了 Unicode中所有中日韩汉字。
什么是GB18030码?
全称是GB18030-2000,由大陆有关部门于公元2000年发布,采用1/2/4 Bytes混合编码,向下兼容GB2312和GBK码,很显然将会成为简体字地区未来的编码标准。