計(jì)算機(jī),顧名思義,就是能夠進(jìn)行計(jì)算的機(jī)器。由于計(jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以,一個(gè)字節(jié)能表示的最大的整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255),如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295。
由于計(jì)算機(jī)是美國人發(fā)明的,所以剛開始的時(shí)候,計(jì)算機(jī)中只能存儲(chǔ)127個(gè)字符,也就是大小寫英文字母、阿拉伯?dāng)?shù)字以及一些英文符號,這些字符在計(jì)算中的存儲(chǔ)是作為ASCII碼進(jìn)行存儲(chǔ)的,對應(yīng)著ASCII編碼表。比如說,英文字母“A”對應(yīng)的ASCII碼為65,每個(gè)字符對一個(gè)1個(gè)字節(jié)。
然而隨著計(jì)算機(jī)的普及,全世界各國越來越多的人開始使用計(jì)算機(jī)。所以計(jì)算機(jī)只能存儲(chǔ)英文字母、數(shù)字以及一些常用字符已經(jīng)不能滿足需要了。在中國,計(jì)算機(jī)還需要存儲(chǔ)中文漢字,所以需要對中文漢字進(jìn)行編碼,但是又不能與ASCII中已經(jīng)存在的編碼沖突,所以中國制定了GB2312編碼,每個(gè)中文至少占用2個(gè)字節(jié)。 可是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標(biāo)準(zhǔn),就會(huì)不可避免地出現(xiàn)沖突,結(jié)果就是,在多語言混合的文本中,顯示出來會(huì)有亂碼。
因此,Unicode應(yīng)運(yùn)而生。Unicode把所有語言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問題了。Unicode的標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符,就需要4個(gè)字節(jié))。現(xiàn)代操作系統(tǒng)和大多數(shù)編程語言都直接支持Unicode。
所以,在Unicode編碼中,大多數(shù)字符都用兩個(gè)字節(jié)表示,比如字符“A”,用Unicode編碼表示,為00000000 01000001,占用兩個(gè)字節(jié),而用ASCII編碼為01000001,對比后發(fā)現(xiàn),字符“A”的Unicode編碼與ASCII編碼相似,在其ASCII編碼前面補(bǔ)一個(gè)字節(jié)0,就是Unicode編碼。可是新的問題又出現(xiàn)了:如果統(tǒng)一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲(chǔ)空間,在存儲(chǔ)和傳輸上就十分不劃算。 所以,本著節(jié)約的精神,又出現(xiàn)了把Unicode編碼轉(zhuǎn)化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié),常用的英文字母被編碼成1個(gè)字節(jié),漢字通常是3個(gè)字節(jié),只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址肬TF-8編碼就能節(jié)省空間。
新聞熱點(diǎn)
疑難解答