開始計算機(jī)只在美國用。計算機(jī)只識別'1'和'0',八位的字節(jié)一共可以組合出256(2的8次方)種不同的狀態(tài)。最初美國人做計算機(jī)編碼只針對英文字母和字符,把所有的空格、標(biāo)點(diǎn)符號、數(shù)字、大小寫字母分別用連續(xù)的字節(jié)狀態(tài)表示,一直編到了第127號,這樣計算機(jī)就可以用不同字節(jié)來存儲英語的文字了。這個方案叫做 ANSI 的”Ascii”編碼(American Standard Code for Information Interchange,美國信息互換標(biāo)準(zhǔn)代碼)。當(dāng)時世界上所有的計算機(jī)都用同樣的ASCII方案來保存英文文字。后來世界上各個國家都要使用計算機(jī),128-255被成為“擴(kuò)展字符集”,顯然不夠用。
ISO (國際標(biāo)誰化組織)定制了國際化通用的編碼法則”Universal Multiple-Octet Coded Character Set”,簡稱 UCS, 也就是“unicode“。其規(guī)定必須用兩個字節(jié),也就是16位來統(tǒng)一表示所有的字符,對于ASCII里的那些“半角”字符,unicode包持其原編碼不變,只是將其長度由原來的8位擴(kuò)展為16位,而其他文化和語言的字符則全部重新統(tǒng)一編碼。由于”半角”英文符號只需要用到低8位,所以其高8位永遠(yuǎn)是0,因此這種方案在保存英文文本時會多浪費(fèi)一倍的空間。
當(dāng)時帶寬相當(dāng)昂貴,面對需要傳輸?shù)谋姸酂o用數(shù)據(jù),面向傳輸?shù)谋姸?UTF(UCS Transfer Format)就應(yīng)運(yùn)而生,UTF-8就是每次8個位傳輸數(shù)據(jù),而UTF-16就是每次16個位。UTF-8可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度。
實(shí)際應(yīng)用過程中,計算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r候,就轉(zhuǎn)換為UTF-8編碼。大概關(guān)系如下(廖雪峰的博客):
用記事本編輯的時候,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后,保存的時候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:

瀏覽網(wǎng)頁的時候,服務(wù)器會把動態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:

其他的一些概念:
計算機(jī)內(nèi)只能保存101010等二進(jìn)制數(shù)據(jù),那么頁面上顯示的字符是如何顯示出來的呢?
一:字符集(Charset)charset = char + set,char 是字符,set是集合,charset就是字符的集合。字符集就是是這個編碼方式涵蓋了哪些字符,每個字符都有一個數(shù)字序號。
二:編碼方式(Encoding)編碼方式就是一個字符要怎樣編碼成二進(jìn)制字節(jié)序,或者反過來怎么解析。也即給你一個數(shù)字序號,要編碼成幾個字節(jié),字節(jié)順序如何,或者其他特殊規(guī)則。
三:字形字體(Font)根據(jù)數(shù)字序號調(diào)用字體存儲的字形,就可以在頁面上顯示出來了。所以一個字符要顯示出來,要顯示成什么樣子要看字體文件。
綜上所述,Unicode 只是字符集,而沒有編碼方式。UTF-8 是一種 Unicode 字符集的編碼方式,其他還有 UTF-16,UTF-32 等。而有了字符集以及編碼方式,如果系統(tǒng)字體是沒有這個字符,也是顯示不出來的。