計(jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以一個(gè)字節(jié)能表示的最大的整數(shù)就是255,如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如,兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295等。
ASCII編碼
計(jì)算機(jī)是美國人發(fā)明的,最早只有大小寫英文字母、數(shù)字和一些符號(hào)等127個(gè)字符被編碼到計(jì)算機(jī)里,這也即是我們知道的ASCII編碼(如下圖)。在ASCll編碼下,大寫字母A的編碼是65,小寫字母z的編碼是122,如下圖。
Unicode
從上文中我們知道,一個(gè)字節(jié)能表示的最大整數(shù)是255,但是《現(xiàn)代漢語常用字表》中有3500個(gè)漢字,因此,要處理中文顯然一個(gè)字節(jié)是不夠的,至少需要兩個(gè)字節(jié)。所以,中國就制定了GB2312編碼,用來把中文編進(jìn)去。
你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標(biāo)準(zhǔn),就會(huì)不可避免地出現(xiàn)沖突,結(jié)果就是在多語言混合的文本中,顯示出來會(huì)有亂碼。
鑒于此,Unicode編碼應(yīng)運(yùn)而生。Unicode的出現(xiàn)就是要把所有語言都統(tǒng)一到一套編碼里,以確保在多語言混合的文本中不會(huì)再有亂碼問題。
UTF-8
Unicode的出現(xiàn)解決了亂碼問題,但是也帶來了新問題。編碼長度是不可變的,說使用2個(gè)字節(jié)它一定會(huì)使用2個(gè)字節(jié)。這樣如果你寫的文本基本上都是英文的話,用Unicode編碼比ASCII編碼可能需要多一倍的存儲(chǔ)空間,這在存儲(chǔ)和傳輸上就十分不劃算。
所以本著節(jié)約的精神,科學(xué)家們有創(chuàng)造出了“可變長編碼”的UTF-8編碼。UTF-8編碼根據(jù)不同的數(shù)字大小把一個(gè)Unicode字符編碼成1-6個(gè)字節(jié),比如,常用的英文字母被編碼成1個(gè)字節(jié),漢字通常是3個(gè)字節(jié),只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址肬TF-8編碼就能節(jié)省空間。
字符編碼的工作方式
1、在計(jì)算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r(shí)候,就轉(zhuǎn)換為UTF-8編碼。
2、用記事本編輯的時(shí)候,從文件讀取的UTF-8字符將被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:
3、瀏覽網(wǎng)頁的時(shí)候,服務(wù)器會(huì)先把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8,然后再傳輸?shù)綖g覽器
所以,你看到很多網(wǎng)頁的源碼上會(huì)有類似的信息,這就表示該網(wǎng)頁正是用的UTF-8編碼。
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7525瀏覽量
88328 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9256瀏覽量
85762 -
ASCII
+關(guān)注
關(guān)注
5文章
172瀏覽量
35142
發(fā)布評論請先 登錄
相關(guān)推薦
評論