ANSI C读书笔记系列之字符集篇----第二章 字符集和编码(I ANSI编码)

这两个概念容易让人混淆,因为他们一般并未被严格区分.抛开编码讨论字符集是没有意义的,一如讨论编码一定是针对某一字符集而言的.所以上章在结尾我们不自觉的就说到了字符集与编码的一些基本概念.

制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来.根据字符集内字符的多少,会确定用几个字节来编码. 每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义.通常所说的字符集大多是这个含义.

所以说,字符集和编码是一对整体出现的概念,我们可以只说字符集,那一定也包含针对该字符集的编码方式,我们也可以只说编码,那一定也包含该编码对应的字符集.下面我们主要说下字符编码的发展历程.

我想把字符集的编码发展分成两个阶段,当然,这只是我自己的意思,ANSI编码阶段和UNICODE编码阶段.为什么这么分,我只是想说,编码的发展史经历过各自为阵的阶段,然后才有全球统一的通用字符集编码.

首先出场的自然是大名鼎鼎的ASCII码(American Standard Code for Information Interchange,美国信息互换标准代码)了,从0到127号表示了空格,标点符号,数字,大小写字母等等,存储英文文字是没有问题了,当时世界上所有的计算机都用同样的ASCII方案.这个阶段其实也可以说是通用字符集编码阶段,但毫无疑问,这种通用,是低级的,朴素的.(有点历史发展的味道了,朴素的原始社会只有经历奴隶社会,封建社会,资本主义社会才能到到那高级的没有剥削的共产主义社会呵呵).

当计算机到一些不是很发达的欧洲国家时,即便他们也使用拉丁字母语言,也会有一定数量的变化字母,当然,还有什么西里尔字母的东欧语言,希腊语,希伯来语等等,ASCII码就不够了.还好,还有一位没用啊,那就把128号到255号都用上吧,这些字符集被称"扩展字符集".问题在于,同时产生这种想法的人太多,在128~255之间的各个位置上应该存放什么仁者见仁智者见智.于是只要人们开始在美国以外的地方购买计算机,那么各种各样的不同OEM字符集都会进入规划设计行列.这一阶段的成果就是ISO/IEC 8859,它是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位字符集的标准,现时定义了15个字符集.这里提下ISO 8859-1,它是其中最优秀的扩展方案,通常称之为Latin-1或Extended ASCII.Latin-1包括了足够的附加字符集来写基本的西欧语言.

现在,计算机来到中国(当然,日本,韩国什么的也都有这问题)了,泱泱中华,区区256个符号当然不够了.于是我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了,这种汉字方案叫做"GB2312",但是中国的汉字太多了,于是我们不得不继续把 GB2312 没有用到的码位找出来继续用上.我们规定只要第一个字节是大于127就固定表示这是一个汉字的开始,这是GBK 标准,GBK 包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号,后来GBK又扩成了GB18030,这是汉字"大一统"的标准.从此,中华民族的文化就可以在计算机时代中传承了.

有关咱自己的文化说多了一点,其实也就是对ASCII 的中文扩展. 不同的是,咱这是"DBCS"(Double Byte Charecter Set 双字节字符集).在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里.
上面说的字符集发展过程可以看作是第一个ANSI编码阶段.基本结果是各个国家都搞出了一套自己的编码标准.这里还有一个字节序问题未介绍,这将在介绍完Unicode编码历史后一道说起.

字符集编码的历史进程介绍继续.

 

发布了38 篇原创文章 · 获赞 10 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章