計(jì)算機(jī)只能處理數(shù)字舔痕,如果要處理文本扫倡,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理
由于計(jì)算機(jī)是美國人發(fā)明的,因此藤巢,最早只有127個(gè)字符被編碼到計(jì)算機(jī)里搞莺,也就是大小寫英文字母、數(shù)字和一些符號(hào)掂咒,這個(gè)編碼表被稱為ASCII編碼才沧,比如大寫字母A的編碼是65,小寫字母z的編碼是122绍刮。
但是要處理中文顯然一個(gè)字節(jié)是不夠的温圆,至少需要兩個(gè)字節(jié),而且還不能和ASCII編碼沖突孩革,所以岁歉,中國制定了GB2312編碼,用來把中文編進(jìn)去膝蜈,日本把日文編到Shift_JIS里锅移,韓國把韓文編到Euc-kr里,各國有各國的標(biāo)準(zhǔn)饱搏,就會(huì)不可避免地出現(xiàn)沖突非剃,結(jié)果就是,在多語言混合的文本中推沸,編碼無非就是二進(jìn)制數(shù)據(jù)和字符集之間的一種映射备绽,不同的編碼標(biāo)準(zhǔn)就是不同的映射方式而已。問題是如果字符寫入時(shí)的編碼和讀取時(shí)的編碼不一樣了會(huì)亂碼坤学。
因此疯坤,Unicode應(yīng)運(yùn)而生。Unicode把所有語言都統(tǒng)一到一套編碼里深浮,這樣就不會(huì)再有亂碼問題了压怠。
Unicode標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符飞苇,就需要4個(gè)字節(jié))菌瘫。
ASCII編碼和Unicode編碼的區(qū)別:ASCII編碼是1個(gè)字節(jié)蜗顽,而Unicode編碼通常是2個(gè)字節(jié)。
字母A用ASCII編碼是十進(jìn)制的65雨让,二進(jìn)制的01000001雇盖;
字符0用ASCII編碼是十進(jìn)制的48,二進(jìn)制的00110000栖忠,注意字符'0'和整數(shù)0是不同的崔挖;
漢字中已經(jīng)超出了ASCII編碼的范圍,用Unicode編碼是十進(jìn)制的20013庵寞,二進(jìn)制的01001110 00101101狸相。
你可以猜測,如果把ASCII編碼的A用Unicode編碼捐川,只需要在前面補(bǔ)0就可以脓鹃,因此,A的Unicode編碼是00000000 01000001古沥。
如果統(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é)省空間:
參考:
https://blog.csdn.net/u014495327/article/details/40380041