【转】刨根究底字符编码【2.0版】(3):字符编码的由来、演变与ASCII码
為什么需要字符編碼
1.
計算機(jī)一開始發(fā)明出來時是用來解決數(shù)字計算問題的,后來人們發(fā)現(xiàn),計算機(jī)還可以做更多的事,例如文本處理。
但計算機(jī)其實挺“笨”的,它只“認(rèn)識”010110111000…這樣由0和1兩個數(shù)字組成的二進(jìn)制數(shù)字,這是因為計算機(jī)的底層硬件實現(xiàn)就是用電路的斷開和閉合兩種狀態(tài)來表示0和1兩個數(shù)字的。因此,計算機(jī)只可以直接存儲和處理二進(jìn)制數(shù)字。
2.
為了在計算機(jī)上也能表示、存儲和處理像文字、符號等等之類的字符,就必須將這些字符轉(zhuǎn)換成二進(jìn)制數(shù)字。
當(dāng)然,肯定不是我們想怎么轉(zhuǎn)換就怎么轉(zhuǎn)換,否則就會造成同一段二進(jìn)制數(shù)字在不同計算機(jī)上顯示出來的字符不一樣的情況,因此必須得定一個統(tǒng)一的標(biāo)準(zhǔn)進(jìn)行轉(zhuǎn)換。
于是就設(shè)計出了進(jìn)行這種轉(zhuǎn)換的標(biāo)準(zhǔn)——字符編碼標(biāo)準(zhǔn)。
字符編碼標(biāo)準(zhǔn)的演變
1.
字符編碼標(biāo)準(zhǔn)實際上經(jīng)歷了如下三個階段的演變過程:
① ASCII編碼標(biāo)準(zhǔn)階段 → ② ANSI編碼標(biāo)準(zhǔn)階段 → ③ Unicode/UCS編碼標(biāo)準(zhǔn)階段。
在第一個階段的ASCII編碼標(biāo)準(zhǔn)階段,ASCII編碼標(biāo)準(zhǔn)主要適用于美國(與美國同文的英國大致上也適用)。
后來計算機(jī)發(fā)展到歐洲各國以及世界各地,開始發(fā)展到了作為第二階段的ANSI編碼標(biāo)準(zhǔn)階段,各個國家和地區(qū)先后各自制定了既兼容ASCII但又互不兼容的ANSI編碼標(biāo)準(zhǔn)。
ANSI編碼標(biāo)準(zhǔn)階段的各自為政,為世界各個國家和地區(qū)基于計算機(jī)的信息交流帶來了極大的不便,痛定思痛之余,終于通過Unicode/UCS編碼標(biāo)準(zhǔn)的制定發(fā)展到了第三階段,最終Unicode編碼標(biāo)準(zhǔn)勝出。
EBCDIC碼與ASCII碼
1.
最開始設(shè)計出來的字符編碼標(biāo)準(zhǔn)實際上并非ASCII編碼標(biāo)準(zhǔn),而是EBCDIC編碼標(biāo)準(zhǔn)。EBCDIC,是Extended Binary Coded Decimal Interchange Code(即擴(kuò)展二進(jìn)制編碼的十進(jìn)制交換碼)的縮寫。
EBCDIC碼是由國際商用機(jī)器公司(即IBM)為大型機(jī)操作系統(tǒng)而開發(fā)設(shè)計的,于1964年推出。
在EBCDIC碼中,英文字母不是連續(xù)排列的,中間出現(xiàn)多次斷續(xù),這帶來了一些困擾和麻煩。
因此,在后來IBM的個人計算機(jī)和工作站操作系統(tǒng)中并沒有采用EBCDIC碼,而是采用了晚于EBCDIC碼推出、且后來成為了英文字符編碼工業(yè)標(biāo)準(zhǔn)的ASCII編碼標(biāo)準(zhǔn)。
2.
ASCII碼(American Standard Code for Information Interchange美國信息交換標(biāo)準(zhǔn)碼),由美國國家標(biāo)準(zhǔn)學(xué)會ANSI(American National Standard Institute)于1968年正式制定。
之后,ASCII編碼標(biāo)準(zhǔn)又于1972年被ISO/IEC采用,制定為ISO/IEC 646標(biāo)準(zhǔn)(ISO,即國際標(biāo)準(zhǔn)化組織International Standardization Organization,成立于1946年;IEC,即國際電工技術(shù)委員會International Electrotechnical Commission,成立于1906年;ISO/IEC往往用來表示由這兩大國際組織聯(lián)合制定的標(biāo)準(zhǔn))。因此,ISO/IEC 646(常簡稱為ISO 646)與ASCII指的是同一個編碼標(biāo)準(zhǔn)。
由于ASCII碼要晚于EBCDIC碼出現(xiàn)(網(wǎng)上也有文章說是ASCII碼要早于EBCDIC碼開始設(shè)計,但1968年ASCII碼才正式確定為標(biāo)準(zhǔn)),ASCII碼的編碼方式參照了EBCDIC碼,并吸取了其經(jīng)驗教訓(xùn),將英文字母進(jìn)行了連續(xù)排列,這方便了程序處理。
3.
ASCII編碼標(biāo)準(zhǔn)雖然不是最早出現(xiàn)的字符編碼標(biāo)準(zhǔn),但目前卻是最基礎(chǔ)、最重要、應(yīng)用最廣泛的字符編碼標(biāo)準(zhǔn)。
目前所通行的其他字符編碼標(biāo)準(zhǔn),比如ISO-8859系列、GB系列(GB2312、GBK、GB18030、GB13000)、Big5、Unicode等等,均直接或間接兼容ASCII碼。
而像EBCDIC這樣與ASCII完全不兼容的編碼標(biāo)準(zhǔn),基本上處于已淘汰或?qū)⒁蕴木车亍?/p>
ASCII字符編碼標(biāo)準(zhǔn)簡介
1.
ASCII碼使用七個二進(jìn)制數(shù)字(即比特)來表示一個字符,總共表示128個字符(2^7 = 128,二進(jìn)制編碼為0000 0000 ~ 0111 1111,對應(yīng)的十進(jìn)制就是0~127)。
由于目前計算機(jī)普遍采用8位作為一個字節(jié)來進(jìn)行存取與處理,因此剩下最高位的那1比特一般為0,但有時在一些通訊系統(tǒng)中也被用作奇偶校驗位。
2.
ASCII字符集共計有128個字符(見上表),碼點(diǎn)編號(即字符編號)從0到127(二進(jìn)制為從0000 0000到0111 1111,十六進(jìn)制為從0x00到0x7F),二進(jìn)制最高位都是0。其中:
- 0~31:不可顯示不可打印的控制字符或通訊專用字符,如0x07(BEL響鈴)會讓計算機(jī)發(fā)出嗶的一聲、0x00(NUL空,注意不是空格)通常用于指示字符串的結(jié)束、0x0D(CR回車)和0x0A(LF換行)用于指示打印機(jī)的打印針頭退到行首(即回車)并移到下一行(即換行)等;
- 32:可顯示但不可打印的空格字符;
?
- 33~126:可顯示可打印字符,其中48~57為0-9的阿拉伯?dāng)?shù)字,65~90為26個大寫英文字母,97~122為26個小寫英文字母,其余的是一些標(biāo)點(diǎn)符號、運(yùn)算符號等;
?
- 127:不可顯示不可打印的控制字符DEL。
3.
這時候的字符編解碼非常簡單,比如若要將字符序列編碼為二進(jìn)制流寫入存儲設(shè)備,只需要將該字符序列里的各個字符在ASCII字符集中的字符編號(即碼點(diǎn)編號),直接以一個二進(jìn)制字節(jié)寫入存儲設(shè)備即可。
此時,字符編號就是字符編碼,中間不需要經(jīng)過特別的編碼算法進(jìn)行字符編號到字符編碼的轉(zhuǎn)換計算,更不存在所謂碼元序列到字節(jié)序列的轉(zhuǎn)換。
總結(jié)
以上是生活随笔為你收集整理的【转】刨根究底字符编码【2.0版】(3):字符编码的由来、演变与ASCII码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沪金是什么意思?其交易规则
- 下一篇: 上市公司有权强制赎回可转债吗?再升转债强