原文連接: http://imlane.top/post/unicode-utf-8
首先要明確字符集
和編碼方式
的區(qū)別.
個(gè)人認(rèn)為, 字符集
就是指許許多多的字符的集合, 比如全部中文就是一個(gè)字符的集合, 可以被成為中文的字符集
. 平時(shí)聽(tīng)到的Unicode
也是一種字符集
, 它的目標(biāo)是囊括全世界所有的字符.
而編碼方式
就是把字符集中的所有字符用計(jì)算機(jī)認(rèn)識(shí)的符號(hào)給表示出來(lái), 而且是要高效的表示出來(lái). 對(duì)于Unicode
這個(gè)字符集
來(lái)說(shuō), 就有很多種不同的編碼方式
, 在不同的場(chǎng)合可以使用不同的編碼方式
, 怎么高效怎么用. 對(duì)于同一個(gè)屬于Unicode
字符集的字符來(lái)說(shuō), 在不同的編碼方式
中可以被設(shè)定為不同的編碼. 而UTF-8
就是其中一種Unicode
編碼方式.
UTF-8
最初被創(chuàng)造出來(lái)的目的主要是用來(lái)網(wǎng)絡(luò)傳輸, 按照最初的設(shè)想:
Unicode -> UTF-8 -> Unicode
客戶端 網(wǎng)絡(luò)傳輸 客戶端
關(guān)于這個(gè)的原因, 是因?yàn)?code>UTF-8是變長(zhǎng)編碼(關(guān)于這個(gè)請(qǐng)閱讀相關(guān)的百度百科看看UTF-8是怎么編碼的), 變長(zhǎng)編碼的好處在于網(wǎng)絡(luò)傳輸?shù)臅r(shí)候可以節(jié)約空間, 但是在計(jì)算機(jī)客戶端處理的時(shí)候不方便. 因?yàn)槿绻胍谝淮?code>UTF-8字符串中查找一個(gè)值的話, 只能從頭遍歷, 而在Unicode
這種定長(zhǎng)編碼中, 則可以使用類似于數(shù)組下標(biāo)的方式查找. 所以UTF-8
適合網(wǎng)絡(luò)傳輸而不適合于計(jì)算機(jī)處理.
總結(jié)一下:
字符集
是字符的集合, 編碼方式
是表示(編碼)字符集的方式. 不過(guò)在有些情況下, 某些字符集
的編碼方式
就是他們自己, 所以會(huì)讓人有些混淆. 比如GBK
既是字符集
同時(shí)自己也就是一個(gè)編碼方式
. 而Unicode
會(huì)有UTF-8
, UTF-16
等一些不同的編碼方式
.