字符編碼:Unicode與UTF-8

字符編碼問(wèn)題從之前學(xué)Python的時(shí)候就開(kāi)始困擾我磁玉,一直沒(méi)有去理清楚Unicode和UTF-8之間是什么關(guān)系抽莱,只知道在寫(xiě)代碼的時(shí)候要不斷的decode鸦泳、encode不停的轉(zhuǎn)換才能避免各種奇怪的亂碼船老。前兩天在學(xué)習(xí)Go的時(shí)候又碰到了關(guān)于字符的問(wèn)題,就花時(shí)間將它理清滚躯,繪制了幾個(gè)圖幫助理解雏门,發(fā)現(xiàn)好像也并沒(méi)有那么復(fù)雜
字符編碼
1. Unicode與UTF-8的誕生

? a. 簡(jiǎn)單介紹下字符編碼:在計(jì)算機(jī)中所有內(nèi)容都是以二進(jìn)制存儲(chǔ),那么該如何表示字符呢掸掏?其實(shí)就是制作一個(gè)“映射表”剿配,例如使用二進(jìn)制(01000001)表示大寫(xiě)字母A,將不同的字母阅束、符號(hào)分別用一個(gè)值表示呼胚。計(jì)算機(jī)在讀到一串字節(jié)流的時(shí)候,去這張表中查找息裸,再將它轉(zhuǎn)換成對(duì)應(yīng)的字母蝇更、符號(hào)即可。而因?yàn)橛⑽淖帜讣臃?hào)數(shù)量并不多呼盆,使用8個(gè)二進(jìn)制位就完全足以表示年扩,ASCII碼就是這樣。

? b. 后來(lái)計(jì)算機(jī)不斷的發(fā)展访圃,除了美國(guó)厨幻,其他國(guó)家的人也希望用計(jì)算機(jī)。英語(yǔ)用128個(gè)符號(hào)編碼就夠了腿时,但是用來(lái)表示其他語(yǔ)言况脆,128個(gè)符號(hào)是不夠的。ASCII顯然無(wú)法滿(mǎn)足其他語(yǔ)言的需求批糟。于是不同國(guó)家就開(kāi)始使用不同的編碼方式格了,這樣就導(dǎo)致不同國(guó)家的人“交流”十分困難,因?yàn)榫幋a方式不同而經(jīng)常導(dǎo)致亂碼

? c. 為了解決這一問(wèn)題徽鼎,人們將將所有的語(yǔ)言符號(hào)放到一個(gè)集合中盛末,每一個(gè)符號(hào)用唯一的一個(gè)編碼標(biāo)識(shí),這就是Unicode否淤。所以悄但,Unicode本質(zhì)上是一個(gè)字符集合

? d. Unicode存在的問(wèn)題
? (1)它只規(guī)定了每個(gè)字符的一個(gè)唯一標(biāo)識(shí)-- 一個(gè)二進(jìn)制代碼石抡,但是沒(méi)有規(guī)定這個(gè)標(biāo)識(shí)該怎么存儲(chǔ)檐嚣。比如說(shuō)靠前 面的字符這個(gè)標(biāo)識(shí)比較小,只需一個(gè)字節(jié)即可存儲(chǔ)汁雷;而靠后面的這個(gè)代碼較大净嘀,需要多個(gè)字節(jié)存儲(chǔ)。若統(tǒng)一規(guī)定所有 的字符使用三個(gè)或四個(gè)字節(jié)存儲(chǔ)侠讯,則會(huì)造成巨大的浪費(fèi)挖藏。
? (2) 沒(méi)有規(guī)定一個(gè)編碼方案。比如字節(jié)流傳來(lái)三個(gè)字節(jié)厢漩,那么該如何識(shí)別膜眠?它有可能是三個(gè)字符、兩個(gè)字符溜嗜、 一個(gè)字符宵膨,具有多種情況,計(jì)算機(jī)該怎么識(shí)別炸宵?

? e. UTF-8的誕生
? (1) 上面說(shuō)到辟躏,Unicode作為一個(gè)字符集,存在著資源浪費(fèi)字節(jié)流識(shí)別字符兩個(gè)尚未解決的問(wèn)題土全,那么就需 要一種編碼方式能夠解決這樣的問(wèn)題捎琐。UTF-8就這樣誕生了。
? (2)UTF-8的編碼規(guī)則

1)對(duì)于單字節(jié)的符號(hào)裹匙,字節(jié)的第一位設(shè)為0瑞凑,后面7位為這個(gè)符號(hào)的 Unicode 碼。因此對(duì)于英語(yǔ)字母概页,UTF-8 編碼和 ASCII 碼是相同的籽御。

2)對(duì)于n字節(jié)的符號(hào)(n > 1),第一個(gè)字節(jié)的前n位都設(shè)為1惰匙,第n + 1位設(shè)為0技掏,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒(méi)有提及的二進(jìn)制位项鬼,全部為這個(gè)符號(hào)的 Unicode 碼零截。

? (3) 從UTF-8的編碼規(guī)則可以看出:UTF-8是一種可變長(zhǎng)編碼,避免了資源浪費(fèi)的同時(shí)也解決了字節(jié)流的識(shí) 別問(wèn)題秃臣,因此涧衙,目前使用最廣的就是UTF-8編碼了。

? f. 其他Unicode編碼方式:常見(jiàn)的有UCS-2/UTF-16奥此、GB18030等弧哎,這里就不再敘述。

2. 編碼與解碼具體過(guò)程

? a. 編碼:將字符轉(zhuǎn)成字節(jié)流稚虎,直接用圖說(shuō)明編碼的過(guò)程

編碼.png

?

? b. 解碼:將字節(jié)流轉(zhuǎn)換成字符撤嫩,下面上圖:

解碼.png

?

? c. 不同編碼之間的轉(zhuǎn)換:

編碼轉(zhuǎn)換.png

更多文章發(fā)布在我的個(gè)人博客上,歡迎訪問(wèn)
www.guiguiyo.cn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蠢终,一起剝皮案震驚了整個(gè)濱河市序攘,隨后出現(xiàn)的幾起案子茴她,更是在濱河造成了極大的恐慌,老刑警劉巖程奠,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丈牢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瞄沙,警方通過(guò)查閱死者的電腦和手機(jī)己沛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)距境,“玉大人申尼,你說(shuō)我怎么就攤上這事〉婀穑” “怎么了师幕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诬滩。 經(jīng)常有香客問(wèn)我们衙,道長(zhǎng),這世上最難降的妖魔是什么碱呼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任蒙挑,我火速辦了婚禮,結(jié)果婚禮上愚臀,老公的妹妹穿的比我還像新娘忆蚀。我一直安慰自己,他們只是感情好姑裂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布馋袜。 她就那樣靜靜地躺著,像睡著了一般舶斧。 火紅的嫁衣襯著肌膚如雪欣鳖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天茴厉,我揣著相機(jī)與錄音泽台,去河邊找鬼。 笑死矾缓,一個(gè)胖子當(dāng)著我的面吹牛怀酷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗜闻,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜕依,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起样眠,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤友瘤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后檐束,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辫秧,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年厢塘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肌幽。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晚碾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喂急,到底是詐尸還是另有隱情格嘁,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布廊移,位于F島的核電站糕簿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狡孔。R本人自食惡果不足惜懂诗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苗膝。 院中可真熱鬧殃恒,春花似錦、人聲如沸辱揭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)问窃。三九已至亥鬓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間域庇,已是汗流浹背嵌戈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留听皿,地道東北人咕别。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像写穴,于是被迫代替她去往敵國(guó)和親惰拱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容