計算機字符編碼


編碼與解碼

編碼方式:計算機中所有的信息都采用0,1這樣的二進制位來表示,那么肯定存在特定的映射規則(例如:0010 0011 -> #) 我們將這種一一對應的規則稱為編碼(方式)。 常見的編碼方式有 ASCII、UTF-8、GBK等

編碼:我們希望將 Hi! 這句話保存在磁盤上,由於計算機只能存儲 01 因此我們可以將 Hi! 按照某種編碼方式(ASCII)轉化為 01001000 01101001 00100001 來存儲。從字符串到 二進制的過程叫 編碼

解碼:當我們需要將磁盤上的一句話顯示在屏幕上時,先從磁盤讀取二進制數據 ——01001000 01101001 00100001, 然后按照我們之前使用的 ASCII 編碼方式(對應關系集合)將二進制轉為 Hi!。從二進制到字符串的過程叫 解碼

總結:編碼和解碼是自然語言符號二進制符號相互轉化的過程,要實現一一對應的轉換,就需要依賴某種對應規則,而這種對應規則就是我們所說的編碼方式。

ASCII 編碼

機器存儲數據按照字節來存儲,一個字節 8位,每一位有01兩種狀態。因此一個字節理論上可以表示 2^8 = 256 個不同的狀態,每個狀態對應一個字符就是256個字符。

標准的 ASCII 編碼標准 使用最低7位(后7位)表示字符(最高位為0)共 128個字符。

  • 0~31、127 為不可見字符(共 33 個)
  • 32~126(共95個)是字符(32是空格),其中48~57為0到9十個阿拉伯數字。
  • 65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其余為一些標點符號、運算符號等
    ASCII 對照表:

其他編碼

英語中128個符號編碼就夠了,但是隨着計算機的發展,網絡鏈接了不同語言的地區和國家,即使將ASCII碼中保留的最高位用掉也不夠表示全世界各種語言的自然符號。

因此各個國家和地區都推出了自己地區專用的編碼方式,例如中國的GBKGB18030GB2312等,但是使用地區編碼的字符無法在其他地區使用。由於編碼的不一致,信息交換的成本過高,例如日本的游戲中國用戶無法使用,中國發送的電子郵件法國的朋友無法閱讀... ...

高昂的信息交換成本使得這樣一種編碼方式的誕生成為必然。即這種編碼將世界上所有的符號都納入其中,每一個符號都給予一個獨一無二的編碼,它將徹底的解決亂碼問題。它就是 Unicode,就像它的名字都表示的,這是一種所有符號的通用編碼。

國標 GBK、GB18030、GB2312

國標編碼,是一種兼容ASCII編碼的漢字雙字節編碼字符集(由於ASCII碼高位為0因此,國標碼兼容ASCII碼部分為單字節)常用的國標碼中 GB18030 字符集更加豐富。

Unicode

注意Unicode 只是一個字符集,它只規定了自然符號和二進制碼的映射關系,但沒有規定這個二進制碼的存儲策略。

由於 Unicode字符集過於龐大,在使用中會占用2~4倍的存儲空間,並且很多字符存儲中會出現大量冗余字節(設每個字符占4字節,英文僅需要一個字節表示,那所有的 ASCII 字符前三個字節全為 0,這是無法接受的)

純文本文件采用ASCII碼表示為 1M。若內容不變改為Unicode編碼表示則會變成4M,直接擴大了4倍。無論從何種角度來看這都是無法接受的。

UTF-8

注意: 它不是 Unicode字符集子集,而是Unicode實現方式之一

特點

  • 它是一種變長的編碼方式。
  • 它使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。
  • 它兼容 ASCII編碼

編碼規則

1 與GBK的策略一致,當高位為0時,認為是ASCII字符,反之為其他字符。
2 以首個字節的高位的第一個0前的1個數標記該字符所占字節數,其后為 unicode 碼值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM