字符集与编码八之ASCII和ISO-8859-1

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

ASCII


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

字符集与编码八之ASCII和ISO-8859-1_第1张图片

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来表示换行。

其它字符

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

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

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

ISO-8859-1


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

字符集与编码八之ASCII和ISO-8859-1_第2张图片

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

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

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

你可能感兴趣的:(java基础,字符与编码)