ANSI、GBK、GB2312、UTF-8、GB18030和UNICODE的区
别
编码⼀直是让新⼿头疼的问题,特别是GBK、GB2312、UTF-8这三个⽐较常见的⽹页编码的区别,更是让许多新⼿晕头转向,怎么解释
也解释不清楚。但是编码⼜是那么重要,特别在⽹页这⼀块。如果你打出来的不是乱码,⽽⽹页中出现了乱码,绝⼤部分原因就出在了编码上了。
此外除了乱码之外,还会出现⼀些其他问题(例如:IE6的CSS加载问题)等等。写出本⽂的⽬的,就是要彻底解释清楚这个编码问题!如果你
遇到了类似的问题,那就要仔细的看看这篇⽂章。
ANSI、GBK、GB2312、UTF-8、GB18030和UNICODE
这⼏个编码关键词是⽐较常见的,虽然我把我们放在了⼀起说,但并不意味这这⼏个东西是平级的关系。本部分的内容,引⽤⾃⽹络略有修改,不
知原⽂出处,故⽆法署名。
很久很久以前,有⼀群⼈,他们决定⽤8个可以开合的晶体管来组合成不同的状态,以表⽰世界上的万物,他们把这称为”字节”。再后来,他们
⼜做了⼀些可以处理这些字节的机器,机器开动了,可以⽤字节来组合出很多状态,状态开始变来变去,他们就把这机器称为”计算机”。
开始计算机只在美国⽤。⼋位的字节⼀共可以组合出256(2的8次⽅)种不同的状态。他们把其中的编号从0开始的32种状态分别规定了特殊的⽤
途,⼀但终端、打印机遇上约定好的这些字节被传过来时,就要做⼀些约定的动作。遇上00×10,终端就换⾏,遇上0×07,终端就向⼈们嘟嘟
叫,例好遇上0x1b,打印机就打印反⽩的字,或者终端就⽤彩⾊显⽰字母。他们看到这样很好,于是就把这些0×20以下的字节状态称为”控制
码”。
他们⼜把所有的空格、标点符号、数字、⼤⼩写字母分别⽤连续的字节状态表⽰,⼀直编到了第127号,这样计算机就可以⽤不同字节来存储英语
的⽂字了。⼤家看到这样,都感觉很好,于是⼤家都把这个⽅案叫做ANSIANSI的”AsciiAscii”编码(AmericanStandardCodeforInformation
Interchange,美国信息互换标准代码)。当时世界上所有的计算机都⽤同样的ASCIIASCII⽅案来保存英⽂⽂字。
后来计算机发展越来越⼴泛,世界各国为了可以在计算机保存他们的⽂字,他们决定采⽤127号之后的空位来表⽰这些新的字母、符号,还加⼊了
很多画表格时需要⽤下到的横线、竖线、交叉等形状,⼀直把序号编到了最后⼀个状态255。从128到255这⼀页的字符集被称”扩展字符
集”。但是原有的编号⽅法,已经再也放不下更多的编码。
等中国⼈们得到计算机时,已经没有可以利⽤的字节状态来表⽰汉字,况且有6000多个常⽤汉字需要保存呢。于是国⼈就⾃主研发,把那些127
号之后的奇异符号们直接取消掉。规定:⼀个⼩于127的字符的意义与原来相同,但两个⼤于127的字符连在⼀起时,就表⽰⼀个汉字,前⾯的⼀
个字节(他称之为⾼字节)从0xA1⽤到0xF7,后⾯⼀个字节(低字节)从0xA1到0xFE,这样我们就可以组合出⼤约7000多个简体汉字了。
在这些编码⾥,我们还把数学符号、罗马希腊的字母、⽇⽂的假名们都编进去了,连在ASCII⾥本来就有的数字、标点、字母都统统重新编了两
个字节长的编码,这就是常说的”全⾓”字符,⽽原来在127号以下的那些就叫”半⾓”字符了。
中国⼈民看到这样很不错,于是就把这种汉字⽅案叫做“GB2312″。GB2312GB2312是对ASCIIASCII的中⽂扩展。
但是中国的汉字太多了,后来还是不够⽤,于是⼲脆不再要求低字节⼀定是127号之后的内码,只要第⼀个字节是⼤于127就固定表⽰这是⼀个汉
字的开始,不管后⾯跟的是不是扩展字符集⾥的内容。结果扩展之后的编码⽅案被称为GBKGBK标准,GBK包括了GB2312的所有内容,同时⼜
增加了近20000个新的汉字(包括繁体字)和符号。后来少数民族也要⽤电脑了,于是我们再扩展,⼜加了⼏千个新的少数民族的字,GBKGBK扩成
了GB18030GB18030。从此之后,中华民族的⽂化就可以在计算机时代中传承了。
因为当时各个国家都像中国这样搞出⼀套⾃⼰的编码标准,结果互相之间谁也不懂谁的编码,谁也不⽀持别⼈的编码。当时的中国⼈想让电脑显⽰
汉字,就必须装上⼀个”汉字系统”,专门⽤来处理汉字的显⽰、输⼊的问题,装错了字符系统,显⽰就会乱了套。这怎么办?就在这时,⼀个
叫ISOISO(国际标谁化组织)的国际组织决定着⼿解决这个问题。他们采⽤的⽅法很简单:废了所有的地区性编码⽅案,重新搞⼀个包括了地球上
所有⽂化、所有字母和符号的编码!他们打算叫它”UniversalMultiple-OctetCodedCharacterSet”,简称UCS,俗称“UNICODEUNICODE”。
UNICODE开始制订时,计算机的存储器容量极⼤地发展了,空间再也不成为问题了。于是ISO就直接规定必须⽤两个字节,也就是16位来统⼀
表⽰所有的字符,对于ascii⾥的那些”半⾓”字符,UNICODE包持其原编码不变,只是将其长度由原来的8位扩展为16位,⽽其他⽂化和语⾔
的字符则全部重新统⼀编码。由于”半⾓”英⽂符号只需要⽤到低8位,所以其⾼8位永远是0,因此这种⼤⽓的⽅案在保存英⽂⽂本时会多浪费
⼀倍的空间。
但是,UNICODE在制订时没有考虑与任何⼀种现有的编码⽅案保持兼容,这使得GBK与UNICODE在汉字的内码编排上完全是不⼀样的,没
有⼀种简单的算术⽅法可以把⽂本内容从UNICODE编码和另⼀种编码进⾏转换,这种转换必须通过查表来进⾏。UNICODE是⽤两个字节来表
⽰为⼀个字符,他总共可以组合出65535不同的字符,这⼤概已经可以覆盖世界上所有⽂化的符号。
UNICODE来到时,⼀起到来的还有计算机⽹络的兴起,UNICODE如何在⽹络上传输也是⼀个必须考虑的问题,于是⾯向传输的众多
UTF(UCSTransferFormat)标准出现了,顾名思义,UTF8UTF8就是每次8个位传输数据,⽽UTF16UTF16就是每次16个位,只不过为了传输时的
可靠性,从UNICODE到UTF时并不是直接的对应,⽽是要过⼀些算法和规则来转换。
看完这些,相信你对于这⼏个编码关系等,了解的⽐较清楚了吧。我再来简单的总结⼀下:
中国⼈民通过对ASCII编码的中⽂扩充改造,产⽣了GB2312编码,可以表⽰6000多个常⽤汉字。
汉字实在是太多了,包括繁体和各种字符,于是产⽣了GBK编码,它包括了GB2312中的编码,同时扩充了很多。
中国是个多民族国家,各个民族⼏乎都有⾃⼰独⽴的语⾔系统,为了表⽰那些字符,继续把GBK编码扩充为GB18030编码。
每个国家都像中国⼀样,把⾃⼰的语⾔编码,于是出现了各种各样的编码,如果你不安装相应的编码,就⽆法解释相应编码想表达的内容。
终于,有个叫ISO的组织看不下去了。他们⼀起创造了⼀种编码UNICODE,这种编码⾮常⼤,⼤到可以容纳世界上任何⼀个⽂字和标志。所以
只要电脑上有UNICODE这种编码系统,⽆论是全球哪种⽂字,只需要保存⽂件的时候,保存成UNICODE编码就可以被其他电脑正常解释。
UNICODE在⽹络传输中,出现了两个标准UTF-8和UTF-16,分别每次传输8个位和16个位。
于是就会有⼈产⽣疑问,UTF-8既然能保存那么多⽂字、符号,为什么国内还有这么多使⽤GBK等编码的⼈?因为UTF-8等编码体积⽐较⼤,
占电脑空间⽐较多,如果⾯向的使⽤⼈群绝⼤部分都是中国⼈,⽤GBK等编码也可以。但是⽬前的电脑来看,硬盘都是⽩菜价,电脑性能也已经
⾜够⽆视这点性能的消耗了。所以推荐所有的⽹页使⽤统⼀编码:UTF-8UTF-8。
本文发布于:2022-12-09 16:05:19,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/73477.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |