字符集与编码(八)——ASCII 和 ISO-8859-1

摘要:简单介绍了 ASCII 和 ISO-8859-1 两个常见的字符集(编码)。

目录
[隐藏]

在前面其实也谈到了 ASCII 了,但并没有很具体,作为一个完整系列的一部分,还是有必要谈一下,也作为后面讨论的一些基础。

ASCII

它的全称是 American Standard Code for Information Interchange(美国信息交换标准代码),是一个 7 位字符编码方案。下面是它的一张简图(来自http://www.asciitable.com/index/asciifull.gif):

ASCII 定义了 128 个字符,包括 33 个不可打印的控制字符(non-printing control characters)和 95 个可打印的字符。

控制字符

32 以下的及最后一个 127 是所谓的控制字符。(0x00~0x1F 以及 0x7F)

即上图最左边一列的 32 个字符及最右边一列最后的一个字符(DEL,删除)

熟悉的有 0x09(TAB,horizontal tab,水平制表符),0x0A(LF,line feed,’\n’换行符),0x0D(CR,carriage return,’\r’回车符),其它的很多现在已经是废弃不用了。

关于回车换行(‘\r\n’),在屏幕还不普及的时代,结果输出经常是依赖于所谓的电传打印机,打印头沿着打印杆从左向右移动并打印出一个个字符,当碰到一个回车符时(CR,0x0D,’\r’),打印机就指示打印头重新回到最左边的位置上,这即是传统意义上的回车了。(你可以把打印头想像成一辆小车,回车即是退回原处,现代意义上的回车则通常包含回车与换行两个动作)

回车符后常跟着一个换行符(LF,0x0A,’\n’),打印机收到换行符就会指示滚筒滚动,这样,打印头就对准了纸张上的新的一行。如果没有换行,新的打印输出就会重叠在上一行上,有时走纸不顺畅时也会造成这种后果。

目前,在 Windows 系统上,回车键会产生两个字符 CRLF,一起表示换行。Unix/Linux 之类的则单独用 LF 表示换行,而苹果的 Mac 则单独用 CR 来表示换行(有些说还是用 LF,使用 Mac 的同学可自行验证一下)。

其它字符

包括空格,字母,数字以及一些常见的标点符号等。

关于空格(SPACE,图中第二列第一个,0x20),它没被归到控制字符类,当然,你可能会纠结它是否算可打印的。

由于只定义了 27=128 个字符,用 7 bit 即可完全编码,而一字节 8 bit 的容量是 256,所以一字节 ASCII 的编码最高位总是 0,这为后来的编码方案兼容它带来的便利。

ISO-8859-1

ISO-8859-1 又称 Latin-1,是一个 8 位单字节字符集,它把 ASCII 的最高位也利用起来,并兼容了 ASCII,新增的理论空间是 128,但它并没有完全用完:(截图来自http://zh.wikipedia.org/wiki/ISO/IEC_8859-1

image

可以看到,新增部分也保留了前面的 32 个位置(中间绿色部分,0x80-0x9F),与前面的 ASCII 部分类似,所以实际只增加了 128-32=96 个,主要是西欧的一些字符,另外可以看到乘号(0xD7)和除号(0xF7)也被包含进来了。

0x00-0x1F、0x7F、0x80-0x9F 在此字符集中未有定义。(即图中的绿色部分)

ISO-8859-1 能与 ASCII 兼容,同时它的适用范围又较广,一些协议或软件把它作为一种缺省编码,当然,现在更好的选择是 UTF-8。

发表评论

电子邮件地址不会被公开。