在前面其实也谈到了ASCII了,但并无很具体,做为一个完整系列的一部分,仍是有必要谈一下,也做为后面讨论的一些基础。编码
它的全称是American Standard Code for Information Interchange(美国信息交换标准代码),是一个7位字符编码方案。下面是它的一张简图(来自http://www.asciitable.com/index/asciifull.gif):spa
ASCII定义了128个字符,包括33个不可打印的控制字符(non-printing control characters)和95个可打印的字符。.net
32如下的及最后一个127是所谓的控制字符。(0x00~0x1F以及0x7F)orm
即上图最左边一列的32个字符及最右边一列最后的一个字符(DEL,删除)ip
熟悉的有0x09(TAB,horizontal tab,水平制表符),0x0A(LF,line feed,’\n’换行符),0x0D(CR,carriage return,’\r’回车符),其它的不少如今已是废弃不用了。ci
关于回车换行(‘\r\n’),在屏幕还不普及的时代,结果输出常常是依赖于所谓的电传打印机,打印头沿着打印杆从左向右移动并打印出一个个字符,当碰到一个回车符时(CR,0x0D,’\r’),打印机就指示打印头从新回到最左边的位置上,这便是传统意义上的回车了。(你能够把打印头想像成一辆小车,回车便是退回原处,现代意义上的回车则一般包含回车与换行两个动做)get
回车符后常跟着一个换行符(LF,0x0A,’\n’),打印机收到换行符就会指示滚筒滚动,这样,打印头就对准了纸张上的新的一行。若是没有换行,新的打印输出就会重叠在上一行上,有时走纸不畅时也会形成这种后果。it
目前,在Windows系统上,回车键会产生两个字符CRLF,一块儿表示换行。Unix/Linux之类的则单独用LF表示换行,而苹果的Mac则单独用CR来表示换行。io
包括空格,字母,数字以及一些常见的标点符号等。字符编码
关于空格(SPACE,图中第二列第一个,0x20),它没被归到控制字符类,固然,你可能会纠结它是否算可打印的。
因为只定义了27=128个字符,用7bit便可彻底编码,而一字节8bit的容量是256,因此一字节ASCII的编码最高位老是0,这为后来的编码方案兼容它带来的便利。
ISO-8859-1又称Latin-1,是一个8位单字节字符集,它把ASCII的最高位也利用起来,并兼容了ASCII,新增的理论空间是128,但它并无彻底用完:(截图来自http://zh.wikipedia.org/wiki/ISO/IEC_8859-1)
能够看到,新增部分也保留了前面的32个位置(中间绿色部分,0x80-0x9F),与前面的ASCII部分相似,因此实际只增长了128-32=96个,主要是西欧的一些字符,另外能够看到乘号(0xD7)和除号(0xF7)也被包含进来了。
0x00-0x1F、0x7F、0x80-0x9F在此字符集中未有定义。(即图中的绿色部分)
ISO-8859-1能与ASCII兼容,同时它的适用范围又较广,一些协议或软件把它做为一种缺省编码,固然,如今更好的选择是UTF-8。