常用編碼格式介紹


編程過程中經常會遇到各類字符的編碼方式,經常會混淆,在此總結下常用的編碼方式以及其原理。

Ascii

  因為對於計算機來說只能識別01這兩種字符(0表示低電平,1表示高電平),所有的數據都是通過二進制來表示,對於其他的比如說34sz#等字符用二進制表示就需要一個約定的規范,這就是ascii的由來。

  Ascii碼表是用1個字節來表示128種字符(一個字節8位,可以組成256種字符,首位默認為0,所以ASCII最多就128個字符,當首位為1的時候我們后面再討論),其中0-31127表示控制字符,他們是不可見字符。

  32-126是可見字符,48-57表示0-965-9026個大寫英文字母,97-12226個小寫英文字母。

 

GBK:

  現在英文和數字都有了,但是我們中國漢字怎么表示呢?此時GBK應運而生,上面我們得知ASCII首位為0,假如把它改成1,就表示中文。GBK2個字節來表示,第一個字節的最高位是0則表示字母和數字,假如是1則表示中文。

 

Unicode

  Unicode則是收錄了世界上所有的語言, 但是在運用過程種會出現很多問題,比如一個3個字節的字符,如何區分他是1unicode還是3asicii,還有假如使用unicode,英文字母高位都會設置成0,這就造成了很大的浪費。因此UTF-8UTF-16UTF-32就出現來解決這些問題,主要講當前互聯網上常用的UTF-8

UTF-8

  UTF-8的規則很簡單就兩條:

  1、 對於單字節的字符,最高位為0,其實跟ascii表示一致

  2、 對於n個字節的字符,第一個字節的最高位為n1,第n+1設為0,后面每個字節的前兩位都為10,剩下的用字符對應的unicode來表示,如下圖

  Unicode符號范圍 | UTF-8編碼方式
  (十六進制) | (二進制)
  --------------------+---------------------------------------------
  0000 0000-0000 007F | 0xxxxxxx
  0000 0080-0000 07FF | 110xxxxx 10xxxxxx
  0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
  0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

BCD

  BCD編碼主要用於數字0-9的壓縮,因為0-9二進制表示為0000 00000000 1001,它們的前4位都是0,把他們合並就生成一個新的字符。

比如2個字符’1’,’9’他們對應的Ascii0x310x39,因此表示形式則為2個字節0x31 0x39

假如用BCD格式來表示則將其數字對應的二進制前4位去掉,然后合並,即將00000001000010014位去掉得到0001 1001,得到新的1個字節0x19,這樣看起來就跟十進制一樣,這就是BCD壓縮碼的原理。

 

Base64編碼:

  Base64編碼的作用是將ascii里面的不可見字符變成可見字符來傳輸。Base64編碼的最小使用單元是4個字節,每個字節使用6位,假如不足6的整數倍,則后面補0,剩下的字符補=,因為計算機存儲字節是8位,所以計算字符值時在前面補20

 可能說的有些繞,看下一張圖就了解了

(借用網上的一張圖片 http://www.cnblogs.com/caoyc/p/5794720.html

以A為例補位之后第一個字節為010000,前面補0得到00010000,對應10進制為16,對照字符表得到Q,第二個字節一樣,也是Q,然后base64編碼最小是4個字節,后面兩個字節補=,最終得到QQ==

 

 

下面是一個Base64字符集,它包含大寫字母、小寫字母和數字,以及“+”和“/”符號。

 


免責聲明!

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



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