深入理解ASCII,Unicode和UTF-8编码
1.為什么需要編碼?
??由于計(jì)算機(jī)只能處理0和1(即兩種狀態(tài):高低電平),所有我們需要將英文字母,數(shù)字,特殊符號(hào)翻譯成計(jì)算機(jī)認(rèn)識(shí)的0和1,那如何去翻譯以及用何種規(guī)則去翻譯呢,于是聰明的人們發(fā)明了一系列編碼規(guī)則,即字符和數(shù)字的對(duì)應(yīng)。最先被發(fā)明的是ASCII編碼,后來則衍生出了Unicode編碼和UTF-8編碼。
2.編碼格式的演變
??世界第一臺(tái)計(jì)算機(jī)誕生于美國(guó)賓西法尼亞大學(xué),所以最早使用計(jì)算機(jī)的是美國(guó)人,最早的信息交換代碼也誕生于美國(guó),即ASCII(America Standard Code for Infomation Interchange,美國(guó)信息交換標(biāo)準(zhǔn)代碼)。ASCII碼實(shí)質(zhì)就是數(shù)字和字符的對(duì)應(yīng)關(guān)系,比如大寫字母"A"所對(duì)應(yīng)的十進(jìn)制數(shù)字為65(為了更易理解我們以十進(jìn)制舉例,八進(jìn)制,十六進(jìn)制同理),而十進(jìn)制數(shù)字65在計(jì)算機(jī)中表示為01000001,計(jì)算機(jī)不能存儲(chǔ)字符,但是能存儲(chǔ)0和1,所以字母“A”在計(jì)算機(jī)中實(shí)際存儲(chǔ)為01000001,占8位,即1個(gè)字節(jié)。其他字符也是同樣的道理,各自對(duì)應(yīng)一個(gè)十進(jìn)制數(shù)字,可參考ASCII碼標(biāo)準(zhǔn)對(duì)照表。是不是很簡(jiǎn)單,但是為何人們還制定Unicode編碼呢?由于ASCII編碼是美國(guó)標(biāo)準(zhǔn),所涵蓋的字符也只僅僅包含了A-Z,a-z,數(shù)字0-9,以及其他的控制字符和一些特殊字符,一共包含127個(gè)字符,后來由于計(jì)算機(jī)普及,這127個(gè)符號(hào)已經(jīng)不能滿足人們的需求,于是IBM利用128~255位對(duì)ASCII碼進(jìn)行了補(bǔ)充,包含了附加符號(hào)符號(hào),希臘字母以及制圖符號(hào)等,這一部分編碼則稱為擴(kuò)展ASCII碼。
??世界上有上百種語(yǔ)言,很顯然,標(biāo)準(zhǔn)ASCII碼和擴(kuò)展ASCII碼仍然不能滿足不同國(guó)家對(duì)于編碼的需求,比如漢字的“漢”就不能用ASCII碼表示,如果在編輯器設(shè)置了ASCII編碼,在遇到漢字的情景下則會(huì)出現(xiàn)亂碼,于是中國(guó)制定了GB2312編碼,日本制定了Shift_JIS編碼,但是同一款應(yīng)用,不同地區(qū)的人使用,就需要包含不同的編碼集合,顯然這樣做是不明智的,于是Unicode應(yīng)運(yùn)而生。Unicode編碼通常用2個(gè)字節(jié)表示,有些偏僻的字符會(huì)用到2-4個(gè)字節(jié),從而實(shí)現(xiàn)一套編碼保存所有字符,這樣不同國(guó)家,不同地區(qū)就形成了一套統(tǒng)一的編碼格式。
??還是拿字符“A”舉栗子,“A”對(duì)應(yīng)的ASCII碼為01000001,如果將“A”用Unicode編碼表示就在前面補(bǔ)0就可以了,0000000001000001,現(xiàn)在我們也可以用Unicode編碼來表示“漢”了,0110110001001001。不難發(fā)現(xiàn),如果用Unicode去編碼所有的字符,亂碼的問題也就迎刃而解,但是問題也來了,如果一段文字中,既有英文字母,又有漢字,英文字母同樣也會(huì)用2個(gè)字節(jié)(16位)來進(jìn)行表示,這顯然會(huì)造成存儲(chǔ)空間的浪費(fèi)。那么有沒有一種更加通用并且更加節(jié)省存儲(chǔ)空間的編碼呢?當(dāng)然是有的,聰明的人們發(fā)明出了UTF-8編碼,UTF-8是一種可變長(zhǎng)的編碼,為啥叫UTF-8呢,這個(gè)8是什么意思呢?8代表一個(gè)字節(jié),即8位,但不代表UTF-8用一個(gè)字節(jié)表示一個(gè)字符,而是在UTF-8編碼格式下,一個(gè)字符所占字節(jié)大小變化的最小單位,有點(diǎn)繞,說人話就是由于UTF-8編碼下,不同字符占用空間的大小是可變的,每個(gè)字符可能是1個(gè)字節(jié),也可能是2個(gè)或者3個(gè)字節(jié)。 ??
----- 待更新
總結(jié)
以上是生活随笔為你收集整理的深入理解ASCII,Unicode和UTF-8编码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Logtail提升采集性能
- 下一篇: WWDC2019:iPad全新发布