utf-8、unicode區別與聯繫

1、unicode的誕生
    首先明白計算機能識別的都是二進制010101010這種代碼,但是這些010010111人是難以看懂的,於是美國人就用ASCII碼製作了一張表,裏面包含從a、b、c.......@%$等128個字符差不多半個字節(1111,1111==256   0111,1111==128),爲了以後擴充方便就取了一個字節,最高位是0,就這樣將英文字符、字符、數字128個包含進去了,下次計算機的0101這種二進制代碼就直接查這個ASCII表就知道對應的字符。

    但是,美國用的字母,德國,英國。。。最重要的我們中國漢子幾萬個,一張表存不下啊。

    於是聰明的中國人發明了GBK編碼表,gbk編碼規定,計算機不能在每次都只讀一個字節(00000000,8位表示一個字節)那麼死板了,你要先看看第一位是不是爲0,要是爲0 的話,就當作ASCII碼來讀入一個字節,不然的話就讀入兩個字節(漢子太多一個字節存不下,讀入兩個字節表示漢字就查GBK)。

    那麼每個國家一個表,這可就尷尬了,相互通信的時候由於解碼方式不同就會導致亂碼(用ASCII發郵件,計算機查ASCII錶轉換成對應0101010二進制,接收的人用GBK解碼,將010101取查GBK肯定就查不到啊)。

    於是,國際組織就發明了一套公用的表unicode編碼,將所有國家,所有字符都收進去了從0一直到100多萬(用三個字節)

2、utf-8的產生
    雖然世界通用的表unicode是有了,但是有人就發現這有點浪費資源啊。每次讓計算機讀取三個字節然後參照Unicode表解碼,那麼像a、b...0、1、2...這些一個字節就夠了的就太浪費了。

    於是uft-8,utf-16,utf-32這些編碼方案就出現了。utf-16是用兩個字節來編碼所有的字符,utf-32則選擇用4個字節來編碼,utf-8爲了節省資源,採用變長編碼,編碼長度從1個字節到6個字節不等。可由於互聯網大部分是1個字節(代碼很多英文的),所以最後大家選擇用的最多的還是utf-8。

總結一句就是

=====================

unicode 是一種包含所有字符的編碼表格,例如,給一個漢字規定一個代碼,一個字母也一個代碼。
=====================
一個unicode碼可能轉成長度爲一個BYTE,或兩個,三個,四個BYTE的UTF8碼,取決於unicode碼的值(utf-8可變長)。

英文unicode碼因爲值小於十六進制表示的0x80(即8x16=128,即01111111=128,即一個字節就可以表示了),只要用一個BYTE的UTF8傳送,比送unicode兩個BYTEs快。

UTF8是爲傳送unicode而想出來的“再編碼”方法罷了,將unicode編碼之後再在網絡傳輸。

因此,UTF-8最適合用來作爲字符串網絡傳輸的編碼格式,自動變長節約空間嘛。解碼的時候按UTF-8先解碼成unicode,在查unicode表解碼二進制,如下圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章