在前面其實也談到了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。