字符集详解

来源:互联网 发布:美橙互联 数据库 编辑:程序博客网 时间:2024/06/08 04:20

ISO-8859-1是对ASCII的扩展,简体中文的编码GB2312,ASCII占用一个字节,但是只用到了八位中的后七位,第一位默认为0,ISO-8859-1则是在ASCII的基础上扩展了第一位,并兼容ASCII,而Unicode是定长编码(定长编码对于计算机而言处理速度相对较快),使用两个字节,一个英文字母跟一个汉字占用空间相同,所以说平时看到一个字符的时候并不能直接确定它所占用的空间,而应该结合它的编码方式来确定,不兼容其他字符集;

ASCII:应用于英文系列,单字节,只占用7位,第一位默认为0。

ISO-8859-1:应用于英文系列,单字节,扩展ASCII,又名 Latin-1。此编码方式只是针对ASCII编码的第一位做了扩充,在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"。很明显,这种表示方法还需要以另一种编码为基础。

GB2312:只能表示简体中文。在中文环境里,单字节编码中已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。此时,我们不客气地把那些127号之后的奇异符号们直接取消掉,并且规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。这种汉字方案叫做"GB2312"。GB2312 是对 ASCII 的中文扩展。

GBK:表示简体和繁体中文,兼容GB2312,GB2312虽然使用了两个字节,但是还是有很多的状态没有使用,而且汉字的数量是非常多的,GB2312只是表示了其中常用的一部分,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK 扩成了 GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。

Unicode:应用于所有字符系列,定长双字节。由于在单字节的基础上,不同的语种开始扩展自己的编码,这导致不同的语种之间不能交流,因此出现了一个组织统一并扩展了编码,这就是Unicode。UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些"半角"字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高 8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。从 UNICODE 开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的"一个字符"!同时,也都是统一的"两个字节",请注意"字符"和"字节"两个术语的不同。UNICODE 是用两个字节来表示为一个字符,他总共可以组合出65535不同的字符,这大概已经可以覆盖世界上所有文化的符号。UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容,这使得 GBK 与UNICODE 在汉字的内码编排上完全是不一样的,没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换,这种转换必须通过查表来进行。

UTF-8:应用于所有字符系列,

BIG5:

原创粉丝点击