utf-8和Unicode的區別

utf-8和Unicode到底有什麼區別?是存儲方式不一樣?編碼方式不一樣?它們看起來彷佛很類似,可是實際上他們並非同一個層次的概念編碼

要想先講清楚他們的區別,首先應該講講Unicode的來由。翻譯

  • 衆所周知,在盤古開天闢地以前,sorry ,走錯片場了(⊙o⊙)…在計算機發明的時候 ,因爲計算機你只能表示二進制的數據,美帝人民爲了交流通訊方便,約定了一個編碼系統,就是ASCII碼,把abc..xyz...ABC...XYZ...!@#...等字符分別和0,1,2,3,4......對應,發現差很少恰好128個數,半個字節的長度,爲了防止之後須要爲新的符號編碼,因而乾脆取一個字節,最高位置爲0。後七位從0-127分別對每個符號編碼。
    • 因而,計算機每次讀取一個字節,而後參照ASCII表把這些編碼翻譯成字符。美國人民很高興,拿着本身玩去了.......
  • 後來歐洲人也玩計算機,發現不行啊,還有不少符號(法語,德語)ASCII沒辦法表示啊,因而歐洲人本身也擼了一套編碼,一個字節的長度,把最高位也用掉了。這套編碼叫ISO。code

    • 和ASCII表相似,計算機也是每次只讀一個字節,而後按照ISO表,解碼出字符。因而歐洲人民也很高興。
  • 中國人不高興了,特麼咱們漢字有幾萬個,經常使用的就有幾千個,沒有兩個字節根本交不了貨。因而勤勞勇敢的中國人民就破天荒的用了兩個字節來表示中文。整出一套GBK。爲了現實我中華民族兼容幷蓄,咱們兼容了ASCII編碼。orm

    • gbk編碼規定,計算機不能在每次都只讀一個字節那麼死板了,你要先看看第一位是否是爲0,要是爲0 的話,就看成ASCII碼來讀入一個字節,否則的話就讀入兩個字節。utf-8

    • 計算機 : WTF ?? !!資源

因而天下就很亂了,歐洲人看不懂咱們發過去的信息,咱們也看不懂他們的東西,美國人看不懂個人東西,不過咱們能看懂他們的信息。。。哈哈。unicode

總之,天下大亂,羣雄並起,百姓生靈塗........io

這個時候,就有個國際組織站出來了,說,這麼着吧,我來擼一套編碼,把你們的編碼都概括進來。因而unicode編碼就出現了。這套編碼表的編號從0一直算到了100多萬(三個字節)。每個區間都對應着一種語言的編碼。目前幾乎收納了全世界大部分的字符。全部的字符都有惟一的編號,這就解決了解碼的衝突,因而天下大定!可是,unicode把你們都概括進來,卻沒有爲編碼的二進制傳輸和二進制解碼作出規定。只留下一句:大哥只能幫你到這裏了。form

我知道你必定在想,要個毛的規定啊,每次讓計算機讀取三個字節而後參照Unicode表解碼就行了。想法是好的,可是若是相似於1號編碼這樣的小數據編號也要三個字節的話,那麼也就是0x000001,這簡直就是浪費啊,明明一個字節就能夠表示了,你非得整三個,因此你究竟是幾個意思呢?class

無論怎麼樣,大哥雖然走了,可是問題還得解決啊,因而,就出現了以下解決方案:uft-8,utf-16,utf-32這些編碼方案。utf-16是用兩個字節來編碼全部的字符,utf-32則選擇用4個字節來編碼。下面只講一下utf-8這種解決方案,由於它用的最多,用得最可能是由於在當時它的方案最好,最節省資源。

  • utf-8

utf-8爲了節省資源,採用變長編碼,編碼長度從1個字節到6個字節不等

 
utf-8.png
  • 我知道你想說,明明看起來utf-16更加節省資源,節省空間,正常人都看得出來。但實際上,當時,互聯網上絕大部分存在的資源都是英文的,英文在utf-16中也是2個字節,而在utf-8中則是1個字節。在當時,顯然是utf-8更加節省資源。如今咱們在中文世界裏來比較他們,則是utf-16更加節省資源。

OK,關於unicode和utf-8的區別已經解釋完畢了。下面用一個圖來鞏固一下那些區別

 
                                                                                  Unicode與uft-8的結構關係.png
相關文章
相關標籤/搜索