計算機基礎——什麼是編碼?

2021-01-21 qian端狗

計算機基礎--什麼是編碼?

作者名:麗斯

什麼是編碼

編碼是信息從一種形式或格式轉換為另一種形式的過程,簡單來講就是語言的翻譯過程。我們都知道計算機使用的是機器語言即二進位碼,相信大部分人都無法流暢的閱讀二進位碼,於是為了能夠讓人類更好的理解計算機輸出的結果就需要將機器語言轉換為自然語言,比如英語、俄語和中文等。 這看似簡單的語言轉換過程隨著計算機的普及與網際網路化對語言字符的編碼衝擊也越來越大,編碼規範的調整也伴隨著整個計算機發展歷史。

現代編碼模型

為了能夠更精確的描述在編碼過程中各個產物的歸屬以便正確的描述產物所發揮的功能,於是多事之人將現代的編碼整理為一套可以說明的模型而且分為五層之多。

現代編碼模型之分層:

1. 抽象字符表(ACR:Abstract character repertoire):是一個系統支持的所有抽象字符的集合,簡單來說就是該層規範要確定一個系統能夠包含的字符和字符形式,比如Windows支持中文,那麼它的抽象字符表一定有中文字符集合而且也適配不同編碼方式指定具體是何字符。

2. 編碼字符集(CCS:Coded Character Set):是將字符集中每個字符映射到1個坐標(整數值對:x, y)或者表示為1個非負整數。字符集及碼位映射稱為編碼字符集。例如,在一個給定的字符表中,表示大寫拉丁字母「A」的字符被賦予整數65、字符「B」是66,如此繼續下去。簡單來說這就是一個映射關係表,將一串碼值映射到抽象字符表裡的特定字符。

3. 字符編碼表(CEF:Character Encoding Form):該層也稱為」storage format」,對於一個包含幾乎全球語言的字符集,比如Unicode字符集最多可以2的31次方個字符,用4個字節來存儲一個,但是真的有必要在時時刻刻都使用4個字節來記錄一個字符嗎?很顯然不是這樣,比如拉丁字母「A」實際上需要二進位碼01000001一個字節就可以表示,於是需要一種類似於壓縮方式的方法來儘量用最少空間存儲不同種類字符的方式比如後面會提到的UTF。所以這一層主要是描述字符編碼所能採用的編碼格式。

4. 字符編碼方案(CES:Character Encoding Scheme):也稱作」serialization format」,將定長的整型值(即碼元)映射到8位字節序列,以便編碼後的數據的文件存儲或網絡傳輸。

5. 傳輸編碼語法(transfer encoding syntax):用於處理上一層次的字符編碼方案提供的字節序列。一般其功能包括兩種:一種是把字節序列的值映射到一套更受限制的值域內,以滿足傳輸環境的限制,例如Email傳輸時 Base64或者quoted-printable,都是把8位的字節編碼為7位長的數據;另一種是壓縮字節序列的值,如 LZW 或者 行程長度編碼等無損壓縮技術。

常用的編碼

ASCII

ASCII(發音: [/ski/]) ,American Standard Code for Information Interchange,美國信息交換標準代碼)是基於拉丁字母的一套計算機編碼系統。它主要用於顯示現代英語,而其擴展版本 EASCII 則可以部分支持其他西歐語言,並等同於國際標準ISO/IEC 646]。 ASCII編碼由1個字節8bit來標識字符編碼表映射關係,如果按字節來算最多支持256個字符映射,但是由於最高位始終為0,支持的字符更少了。下圖為編碼表:

從圖中可以看到,如果使用ASCII碼錶,將二進位高四位(0100)低四位 (0001)對應ASCII碼錶就得到了A字符,如果要得到I LOVE Y,計算機只需要得到二級制01001001(I)00100000(空格)01001100(L)01001111(O)01010110(V)01000101(E)00100000(空格)01011001(Y)。 ASCII碼所對應的所有字符高四位首位都為0,所以ASCII碼成功的用7個比特位就完成了計算機語言轉換為自然語言(人類語言)的壯舉,這看起來很令人振奮,美國人天真的以為IPv4的最大數255.255.255.255(32位)總計4,294,967,296個地址(其中還有些專用地址佔去一小部分)就能覆蓋全球的網絡設備。所以說當其他國家的語言比如中文、日文和阿拉伯文需要用計算機顯示的時候就完全無法使用ASCII碼如此少量的編碼映射方式。

GB2312

1974年8月,中國開始了748工程,包括了用計算機來處理中文字,展開了各種研究工作,後來到1980年公布了 GB 2312-80漢字編碼的國家標準。 GB 2312標準共收錄6763個漢字 ,其中一級漢字3755個, 二級漢字3008個;同時收錄了包括 拉丁字母、 希臘字母、 日文、平假名及片假名字母、 俄語在內的682個字符。 看起來GB2312已經很牛逼了,使用2個字節作為編碼字符集的空間,但是6763個漢字是真的不夠用啊。

GBK

我漢語博大精深,只有6763個字怎麼夠?於是GBK中在保證不和GB2312、ASCII衝突(即兼容GB2312和ASCII)的前提下,也用每個字佔據2位元組的方式又編碼了許多漢字。經過GBK編碼後,可以表示的漢字達到了20902個,另有984個漢語標點符號、部首等。值得注意的是這20902個漢字還包含了繁體字。

GB18030

然而,GBK的兩萬多字也已經無法滿足我們的需求了,還有更多可能你自己從來沒見過的漢字需要編碼。這時候顯然只用2位元組表示一個字已經不夠用了(2位元組最多只有65536種組合,然而為了和ASCII兼容,最高位不能為0就已經直接淘汰了一半的組合,只剩下3萬多種組合無法滿足全部漢字要求)。因此GB18030多出來的漢字使用4位元組編碼。當然,為了兼容GBK,這個四字節的前兩位顯然不能與GBK衝突(實操中發現後兩位也並沒有和GBK衝突)。我國在2000年和2005年分別頒布的兩次GB18030編碼,其中2005年的是在2000年基礎上進一步補充。至此,GB18030編碼的中文文件已經有七萬多個漢字了,甚至包含了少數民族文字。

Unicode

在ASCII編碼明顯不夠用後,美國國家標準學會又搞了幾套ISO的編碼規範來兼容其他中歐等國家的語言,但是兼容性還是有不少問題。最終美國加州的Unicode組織他們放大招搞了Unicode(萬國碼)打算藉此一統江湖,最早Unicode也是最高16位2位元組來進行映射,經過幾番修改最終可以以最長32位4位元組的空間來映射最多2的31次方個字符。看起來一切完美了,當然如果以後有了星際旅行並不一定能夠完全標識全宇宙的文字。

從上面這一大堆改動來看,不管中國還是美國,在處理位數上遠遠低估了後續可能產生的擴展性,你可能會覺得一早就用4個字節來標識全球所有字符就完事了費那麼大勁來回改。給你看一幅圖你或許就會明白為什麼那時候的科學家那麼謹小慎微了。如圖:

1956年IBM的硬碟,可存儲5MB的數據

UTF-8又是什麼

Unicode確實是一套能夠滿足全球使用的字符集,但是難道真的需要每一個字符都佔用4個字節嗎?雖然現在的存儲空間已經足夠大了,但是4個字節一個字符的方式還是很不明智的,比如字符「A」二進位碼01000001卻需要以00000000000000000000000001000001的方式存儲。這一定不是我們想要的。於是UTF(Unicode/UCS Transformation Format)應運而生,UTF是字符編碼五層次模型的第三層,通過特定的規則對Unicode字符編碼進行一定的壓縮和轉換以便快捷傳輸。 UTF的代表就是UTF-16和UTF-8,千萬不要以為UTF-16比UTF-8更厲害能夠容納更多字符,字符容納數量都是是Unicode編碼集所確定的範圍,UTF只是通過不同的轉換形式更快更高效的找到特定字符。而UFT-16 比較奇葩,它使用 2 個或者 4 個字節來存儲。 對於 Unicode 編號範圍在 0 ~ FFFF 之間的字符,UTF-16 使用兩個字節存儲,並且直接存儲 Unicode 編號,不用進行編碼轉換,這跟 UTF-32 非常類似。 對於 Unicode 編號範圍在 10000~10FFFF 之間的字符,UTF-16 使用四個字節存儲,具體來說就是:將字符編號的所有比特位分成兩部分,較高的一些比特位用一個值介於 D800~DBFF 之間的雙字節存儲,較低的一些比特位(剩下的比特位)用一個值介於 DC00~DFFF 之間的雙字節存儲。

設計UTF-8編碼表達方式的理由:

1、單字節字符的最高有效比特永遠是0(大家可以看看其他編碼方式如何彆扭的兼容ASCII碼的);

2、多字節序列中的首個字符組的幾個最高有效比特決定了序列的長度。最高有效位為110的是2位元組序列,而1110的是三字節序列,如此類推;

3、多字節序列中其餘的字節中的首兩個最高有效比特為10。

轉換關係如下圖:

這樣我們根據所要兼容的語言不同根據UTF-8多字節最高有效比特去判斷編碼最終使用了多少個字節來存儲,其餘的字節也都滿足最高有效比特為10的特點有了一定的糾錯功能。 簡單一些理解就是UTF-16就是通過2個字節16位來控制壓縮比例,而UTF-8已經以高精度的1個字節8位來控制壓縮比例了。當然還有中UTF-32就可想而知,基本跟Unicode如出一轍。

相關焦點

  • 從輸入法的全形、半角聊起:計算機的那些字符編碼
    作為第一臺計算機的ENIAC採用的是十進位計算,所以在數學計算時不用任何轉換。但是二進位的EDVAC卻需要使用二進位「0101」這些數字表示十進位數字,這時計算機就使用了第一種編碼——BCD碼。BCD碼是用4位二進位數來表示十進位數中的0到9這10個數中的任意一位。比如8421 BCD碼0010表示2,0100表示4。那麼什麼是編碼呢?
  • 學計算機編程需要什麼基礎_一文了解
    計算機編程已經成為16-18歲學生的重點關注課程,對於每個學生來說,學計算機編程需要什麼基礎,是決定學生是否學習的前提條件。下面我們一起看看,學習計算機編程需要哪些基礎:1、英語基礎計算機英語與傳統的英語知識不同,需要了解的大部分是計算機的專業單詞或者詞彙,普遍較為簡單。但是在高級編程中,會出現比較生澀的詞彙,對於想要參與計算機語言設計以及在職業發展上有更多追求的同學可以自學一下大學英語。畢竟現在在學習IT技術上晉升的道路上,專業文檔的閱讀能力也是非常重要的。
  • 編碼解碼是什麼意思?URL 如何編碼解碼?為什麼要編碼?
    編碼解碼是什麼?編碼是信息從一種形式或格式轉換為另一種形式的過程,也稱為計算機程式語言的代碼簡稱編碼。用預先規定的方法將文字、數字或其它對象編成數碼,或將信息、數據轉換成規定的電脈衝信號。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。編碼是信息從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。
  • 編碼方式有哪些_簡述常用的編碼方式
    編碼方式有哪些_簡述常用的編碼方式   1、ASCII碼   學過計算機的人都知道ASCII碼,總共有128個,用一個字節的低7位表示,0~31是控制字符如換行回車刪除等;32~126是列印字符,可以通過鍵盤輸入並且能夠顯示出來。
  • 2019考研計算機學科專業基礎綜合考試大綱
    2019年年全國碩士研究生招生考試  計算機學科專業基礎綜合考試大綱  I 考試性質  計算機學科專業基礎綜合考試是為高等院校和科研院所招收計算機科學與技術學科的碩士研究生而設置的具有選拔性質的聯考科目
  • 什麼是計算機網絡 計算機網絡入門的基礎知識
    本篇將介紹關於計算機網絡入門基礎知識的分享,有興趣的朋友可以了解一下!首先我們要對計算機網絡有個定義:計算機網絡就是將分布在不同地理位置並具有獨立功能的多臺計算機,通過通信設備和線路連接起來,在功能完善的網絡軟體(網絡協議及網絡作業系統等)支持下,以實現網絡資源共享和數據傳輸為目的的系統。
  • 5G信道編碼之爭
    同一時間,什麼5G長碼、短碼、信道編碼、控制編碼等專業詞彙一股腦地塞給我們,讓吃瓜群眾試圖還原事件真相充滿了難度,接下曾經是通信人的小編給大家理清楚其中的技術細節。3GPP作為全球通信標準的主要制定方,每個標準的確定都是經過反覆討論、驗證以及嚴格審查以確保其可實現性。
  • 神奇的漢字編碼,了解一下
    一直覺得不是由中國人發明的計算機,卻可以使用漢字進行界面交互非常神奇。今天就來和大家聊一下關於漢字編碼的最底層的邏輯。(1)漢字信息交換碼(國標碼)漢字交換碼是指不同的具有漢字處理功能的計算機系統之間在交換漢字信息時所使用的代碼標準。
  • 論計算機基礎課程學習的重要性
    計算機學習中有哪些基礎課程要學?我一直處在一個迷惑當中,我想學好計算機到底要學多少門學科。一開始,我是想學Python這門程式語言,但是學完入門以後發現有很多一知半解的,很多思路都不會。我被繞暈了,我不知道該從何來學習計算機。這時我想的是學計算機專業學生所學的課程來進行學習,大學中教的課程肯定是要有用處的。於是我又找到了《線性代數》《微積分》《離散數學》來進行學習,推薦大家一個比較好的學習平臺——中國大學慕課,這裡面只要用手機註冊一個帳號便可以學習很多知名大學的課程。
  • AP計算機科學A和計算機原理有什麼區別
    新東方網>留學>留學考試>AP>正文AP計算機科學A和計算機原理有什麼區別 2019-02-20 11:53 來源:新東方網
  • 計算機基礎知識
    計算機基礎知識信息與數據信息是屬性,是抽象的邏輯意義。可將信息理解為形容詞故信息不可以獨立存在,需要載體;信息的功能是消除事物的不確定性,把不確定性變成確定性。計算機文化的真正內涵是計算機具有計算機信息處理能力。計算機文化是20世紀八十年代提出的計算機發展及其趨勢根據計算機採用的主要元器件或電子器件的不同,將計算機的發展分為四代。第一代至第四代的主要元器件分別是電子管,電晶體,中小規模集成電路,大規模或超大規模集成電路。第四代是從197年至今,197年CPU產生微機產生。
  • 編程是什麼——馮諾依曼結構計算機的出現
    EDVAC方案設計思想之一是二進位,他根據電子元件雙穩工作的特點,建議在電子計算機中採用二進位。報告提到了二進位的優點,並預言,二進位的採用將大大簡化機器的邏輯線路。在我們今天的角度來看,馮·諾依曼的方案設計是十分先進的,直到現在我們如今的計算機都是在馮·諾依曼設計的計算機的結構中優化和迭代而來,而計算機的底層仍然還是二進位。
  • 轉座子編碼CRISPR-Cas系統靶向DNA的結構基礎
    轉座子編碼CRISPR-Cas系統靶向DNA的結構基礎 作者:小柯機器人 發布時間:2019/12/19 16:04:46 美國哥倫比亞大學Israel
  • 計算機應用基礎試題2
    絕密★啟用前計算機應用基礎試題一、單項選擇題(本大題共40小題,每小題1分,共40分)在每小題列出的四個選項中只有一個選項是符合題目要求的,請將正確選項前的字母填在題後的括號內。1.一個完整的微型計算機系統包括( )A.主機箱、鍵盤、顯示器和印表機 B.系統軟體和應用軟體 C.計算機主機及外部設備 D.硬體系統和軟體系統2.既可用作輸入設備又可用作輸出設備的是( )A.滑鼠器 B.磁碟 C.鍵盤 D.顯示器3.文件型計算機病毒主要傳染( )A.*.DOC文件和*.TXT文件
  • 十進位數的編碼與運算
    十進位數的編碼與運算 佚名 發表於 2009-10-13 17:14:40 十進位數的編碼與運算  十進位數的每一個數位的基為10,但到了計算機內部,出於存儲與計算方便的目的,必須採用基2碼對每個十進位數位進行重編碼
  • 超能課堂(137):5G信道編碼之爭
    同一時間,什麼5G長碼、短碼、信道編碼、控制編碼等專業詞彙一股腦地塞給我們,讓吃瓜群眾試圖還原事件真相充滿了難度,接下曾經是通信人的小編給大家理清楚其中的技術細節。3GPP作為全球通信標準的主要制定方,每個標準的確定都是經過反覆討論、驗證以及嚴格審查以確保其可實現性。
  • 計算機二級公共基礎選擇題大全,附帶公式講解
    計算機2級公共基礎120題一、選擇題(1) 下面敘述正確的是______。(C)A.數據的邏輯結構在計算機中的表示C. 數據在計算機中的順序存儲方式D. 存儲在外存中的數據(33) 設有下列二叉樹:對此二叉樹中序遍歷的結果為______。(B)A.
  • 2016年4月成人自考計算機與網絡技術基礎考試真題
    點擊查看:全國自考00894計算機與網絡技術基礎歷年真題及部分答案匯總 一、單項選擇題(本大題20小題,每小題1分,共20分)   在每小題列出的四個備選項中只有一個選項是符合題目要求的,請將其代碼填寫在題後的括號內。
  • 空間基因:建築信息編碼簡史(二)
    上一期我們說到計算機對自然語言的編碼,以及人們怎樣解決編碼中遇到的問題,這一期我們開始進入建築行業的信息編碼。上次我們留了一個問題給大家:如果編碼只需要考慮語言兼容的問題,為什麼光是北美地區就先後出現了三種建築編碼體系?比起語言編碼,建築編碼是不是有更複雜的問題需要解決呢?
  • 對稱性與拓撲序:新型量子計算機的物理基礎|眾妙之門
    在二十世紀五十年代,只要通過將相變過程描述成對稱性的破缺(break of symmetry),就可以解釋當水結成冰時發生了什麼:液態水在原子尺度上具有旋轉對稱性,即在每個方向上看起來都一樣,而冰中的水分子鎖定在晶體的行和列中。1982年,事情發生了變化,在超低溫條件下,二維電子氣的分數量子霍爾態被發現。