找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 89|回复: 0

第4集的文字稿

[复制链接]

403

主题

307

回帖

3173

积分

管理员

积分
3173
发表于 2024-11-3 10:00:23 | 显示全部楼层 |阅读模式
前面说过,ASCII代码表或者说字符集用于主机和终端之间的通信和控制。在那个时代,主机和终端之间的信道宽度是7个比特,所以你会发现,ASCII字符集采用7比特编码,最多只有128个字符,包括控制字符和图形字符。


随着电子计算机在全球范围内的流行和广泛应用,其它国家的人们也希望这种机器能够处理和显示他们自己国家的文字,比如处理中文和日文,等等。


简单地看,这是每个国家和地区自己的事情:只需要每个国家和地区制定自己的字符集和编码方案,并应用在它们的计算机上。不过你要想一想,整个地球越来越象是个大村子,文化的交流和融合是常态。一个中国人在写文章的时候,肯定是使用汉字或者少数民族的文字,但有时候会夹杂一些其它国家和地区的文字,比如我们经常在文章里使用英文字母、阿拉伯数字,有时候会夹杂一些英文单词、日文、俄文。


如此一来,每个国家在制定自己的字符集和编码方案时,必须额外添加其它国家的文字符号,这看起来象是每个国家都在搞自己的一套包含全球所有文字的字符集。如果真要这样的话,那就妥妥的是重复劳动,没有必要。各搞各的,互不相同,互相不能兼容,这地球还是个村子吗?因此,各个国家和地区必须通力协作,搞一个大家都认可的、全球统一的字符集和编码方案才是正务,而这个事情也只能由国际组织来做,所以这个担子很自然地落在了国际标准化组织ISO的肩上。


在上世纪七十年代末,也就是发明ASCII字符集之后没过几年,国际标准化组织ISO和国际电工委员会IEC一起,发布了一个有关字符代码结构的国际标准,标准的代号是ISO/IEC 2022。紧接着,我国将其转换为国内标准GB 2311。顺便说一句,随着技术的发展,这个标准已经变成推荐性标准GB/T 2311。这两个标准的全文可以在网上搜索,由于推荐性标准是有版权的,就不在这里展示了。


ISO/IEC 2022和GB 2311并不是字符集的标准,而是一个字符编码的标准。什么意思呢?那就是,国际标准化组织让每个国家去制定自己的字符集,但字符的编码方案必须符合ISO/IEC 2022标准。所以说这个标准的作用是指导和协调各个国家和地区的字符如何编码,如何共存。具体来说,这个标准规则是这样的:


首先,和ASCII字符集一样,其它国家和地区的字符也采用基于7比特的编码方案,这是为了兼容和依从于当时的7比特通信协议与通信设备。


使用7个比特可以编码128个字符,编码值小于32的字符是控制字符,用来控制通信设备和通信过程,它们与ASCII字符集中的控制字符是一致的,一样的,编码值也完全相同,可以对比一下,,,,,,顺便说一下,这部分叫做控制字符区,也叫C区,C是英语单词Control的首字母。注意,编码值为27(十六进制1B)的字符是换码字符,有特别用处,后面将讲到。


编码值为32的字符是空格;编码值为127的字符是DEL,删除。它们与ASCII字符集中的空格和DEL字符是一致的,编码值也完全相同,,,,,,


从32到127之间的编码值用于编码不同国家和地区的字符。这些编码值所在的区域叫做图形字符区,也叫G区,G是英语单词Graphic的首字母。


问题在于,这部分一共94个码位,只能编码94个字符,而其它国家和地区的文字不象英语系国家那样简单,尤其是东亚地区,文字数量特别庞大。比如在我们国家,光汉字就有十几万个,何况还有很多少数民族的文字;韩国和日本也文字也比较复杂。那么,这么多的字符,怎么办呢?


很简单,对于美国和其它英语系国家,这94个字符就是ASCII字符集中的对应字符;对于其它国家和地区来说,可以使用两个7比特,但每个7比特的编码值必须介于32和127之间,也就是必须位于7比特编码空间的G区。


举个例子,我们国家的第一个字符集是GB2312,它是依从于ISO/IEC 2022标准的,每个汉字使用了两个7比特。比如汉字“人”,由两个连续的7比特组成,编码值是72 75,分别对应于第一个7比特编码空间的G区和第二个7比特编码空间的G区。


很容易发现,ISO/IEC 2022规定的这种编码方案有个缺陷,即,同一个字符编码对应着不同国家和地区的不同字符。比如72 75这个编码,它应对于ASCII字符集里的两个字符H和K,还对应于汉字“人”,还对应着某个日本文字,等等。换句话说,所有国家和地区的文字不是统一编码的,也不具有唯一的编码。那么,如何知道一个编码对应着哪个国家的哪个字符呢?


别忘了,编码值小于32的字符是控制字符,它们起控制作用,不用来编码图形字符。在这些控制字符里,编码值为27,也就是十六进制1B的字符是换码字符ESC。很好,我们可以用换码字符ESC组成一个换码序列,用来指定后续的编码是属于哪个字符集的。


比如说,换码序列27 40 66的意思是“后面是ASCII字符”;换码序列27 36 40 65的意思是“后面是GB2312字符”。


假如主机和终端传送了以下7比特编码的序列:


27 40 66 50 48 50 53 27 36 40 65 68 106 27 40 66 49 27 36 40 65 84 66


那么,一开始的27 40 66意味着后面的编码对应着ASCII字符,而50 48 50 53是数字字符2025的编码。


接下来,27 36 40 65意味着后面是编码对应着GB2312字符,而68 106是汉字“年”的编码;


后面,27 40 66意味着后面的编码对应着ASCII字符,而49是数字字符1的编码。


最后,27 36 40 65意味着后面是编码对应着GB2312字符,而84 66是汉字“月”的编码。


所以,这一串文本流传送的是“2025年1月”。


一个可能的问题是,为什么转码序列这么长,这么复杂?不应该是很简单的吗,比直接用27再加一个有特殊含义的数字不就行了吗?原因是,上面那些只是我们对ISO/IEC 2022和GB 2311标准的极简说明,这两个标准实际上是特别复杂的。


这两个标准在今天已经被人遗忘,很少有机器支持,但它们所要求的编码规则深深地影响了后来的字符集的编码方案,比如GB2312等字符集及其编码。不理解ISO/IEC 2022和GB 2311,也就无法理解为何后来的字符集采用区位的方式来收集和编码字符,以及它们的编码值都大于32。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-11-21 20:56 , Processed in 0.220318 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表