在《Windows程序设计》中有这样一段话:ASCII的开发过程中对于代码的宽度应该是6位、7位或是8位,一直争议不断。考虑到可靠性,不能使用转换字符。因此ASCII不能使用6位编码。考虑到成本价格,也派出了8位编码的可能性。(位数多在当时是非常昂贵的。)(Charles Petzold著。第五版 2.1.1)
这句话一直不太理解。上网搜了一下。整理一下。
一、 ASCII由Hollerith卡的编码演变而来。Hollerith卡的编码变为BCDIC编码(6位),在发展为EBCDIC(8位)。EBCDIC是IBM的大型机标准。
如果使用6位码,那么可以有64个字符,这样就必须使用转换字符进行扩充,例如:在6位编码中,大写字母没有包含进去,我们就定义个转义字符,如\a代表大写字母A,\b代表字母B.也就是用已经分配的编码来组合替代未分配的编码.这样就会产生很多麻烦。尽管我们有些时候(比如C语言)还是使用转义字符。个人认为这是为了使用的方便而不是扩展。
二、随着计算机的发展,8位字节标准的确立,就可以用一个字节来存储ASCII。这样就多出来128个空位。IBM在1981年推出了这样的256个字符的字符集,包含了一些希腊字母以及其他字符。
三、另外,可以让最高位作为奇偶校验位。例如:“F”的ASCII码为46H,采用奇校验方式,为“0100 0110“,而不是“100 0110 ”。
四、ASCII的优点。26个字母代码是连续的(在EBCDIC代码中就不是这样的);大写字母和小写字母可通过翻转一位就可相互转化;10个数位的代码可从数值本身方便地得到(0是30H,9是39H)。
五、扩展至后的ASCII仍然不够用。双字节字符集(DBCS)诞生。例如中文的汉字就占两个字节。这种方式的问题很多。例如一个字符串的长度不是字节长度;如果指针指向了一个字节,那么前一个字节在哪里?
六、还有一些编码方式,都不是很完美。相对较好的方式是Unicode。即宽字符方式。它规定每个字符(不是字节)的长度不是8位,而是16位。中日韩的文字占用从0x3000-0x9FFF的代码。当然这样原来的ASCII字符就会浪费很多空间了。更严重的是,Unicode使用的仍然不多。