1. 程式人生 > >【轉載】最為透徹的utf-8、unicode詳解

【轉載】最為透徹的utf-8、unicode詳解

一個 國際 ascii表 inf .com 9.png 就會 src 十六

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表解碼二進制,如下圖:
技術分享圖片



---------------------
作者:勁楓
來源:CSDN
原文:https://blog.csdn.net/tcf_jingfeng/article/details/80134600
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

【轉載】最為透徹的utf-8、unicode詳解