utf-8和Unicode到底有什麼區別?是存儲方式不一樣?編碼方式不一樣?它們看起來彷佛很類似,可是實際上他們並非同一個層次的概念編碼
要想先講清楚他們的區別,首先應該講講Unicode的來由。翻譯
後來歐洲人也玩計算機,發現不行啊,還有不少符號(法語,德語)ASCII沒辦法表示啊,因而歐洲人本身也擼了一套編碼,一個字節的長度,把最高位也用掉了。這套編碼叫ISO。code
中國人不高興了,特麼咱們漢字有幾萬個,經常使用的就有幾千個,沒有兩個字節根本交不了貨。因而勤勞勇敢的中國人民就破天荒的用了兩個字節來表示中文。整出一套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爲了節省資源,採用變長編碼,編碼長度從1個字節到6個字節不等
OK,關於unicode和utf-8的區別已經解釋完畢了。下面用一個圖來鞏固一下那些區別