1. 
          

          1. 新聞動(dòng)態(tài)

            從ASCII碼->Unicode->UTF-8歷史變遷,及其差異

            常見(jiàn)問(wèn)題 發(fā)布者:cya 2019-12-11 08:34 訪(fǎng)問(wèn)量:141

            來(lái)自公眾號:strongerHuang

            說(shuō)到ASCII,Unicode和UTF-8,可能大家都知道是字符編碼,但具體含義,以及其中差異,可能很多人都不知道。

            一、名稱(chēng)解釋

            ASCII:American Standard Code for Information Interchange,美國信息互換標準代碼。

            Unicode:統一碼、萬(wàn)國碼、單一碼,是計算機科學(xué)領(lǐng)域里的一項業(yè)界標準,包括字符集、編碼方案等。

            UTF-8:8-bit Unicode Transformation Format,是一種針對Unicode的可變長(cháng)度字符編碼。

            二、歷史變遷

            先給大家看一張變遷圖:


            很久以前,有一群人,他們決定用8個(gè)可以開(kāi)合的晶體管來(lái)組合成不同的狀態(tài),以表示世界上的萬(wàn)物。他們看到8個(gè)開(kāi)關(guān)狀態(tài)是好的,于是他們把這稱(chēng)為字節”。再后來(lái),他們又做了一些可以處理這些字節的機器,機器開(kāi)動(dòng)了,可以用字節來(lái)組合出很多狀態(tài),狀態(tài)開(kāi)始變來(lái)變去。他們看到這樣是好的,于是它們就這機器稱(chēng)為”計算機“。

            開(kāi)始計算機只在美國使用,八位的字節一共可以組合出256種不同的狀態(tài)。他們把其中的編號從0開(kāi)始的32種狀態(tài)分別規定了特殊的用途,一但終端、打印機遇上約定好的這些字節被傳過(guò)來(lái)時(shí),就要做一些約定的動(dòng)作。遇上0×10, 終端就換行,遇上0×07, 終端就向人們嘟嘟叫。他們看到這樣很好,于是就把這些0×20以下的字節狀態(tài)稱(chēng)為“控制碼。他們又把所有的空格、標點(diǎn)符號、數字、大小寫(xiě)字母分別用連續的字節狀態(tài)表示,一直編到了第127號,這樣計算機就可以用不同字節來(lái)存儲英語(yǔ)的文字了。大家看到這樣,都感覺(jué)很好,于是大家都把這個(gè)方案叫做 ANSI 。

            后來(lái),世界各地都開(kāi)始使用計算機了,但是很多國家用的不是英文,他們的字母里有許多是ASCII里沒(méi)有的,為了可以在計算機 保存他們的文字,他們決定采用 127號之后的空位來(lái)表示這些新的字母、符號,還加入了很多畫(huà)表格時(shí)需要用下到的橫線(xiàn)、豎線(xiàn)、交叉等形狀,一直把序號編到了最后一個(gè)狀態(tài)255。從128 到255這一頁(yè)的字符集被稱(chēng)“擴展字符集。

            等中國人們得到計算機時(shí),已經(jīng)沒(méi)有可以利用的字節狀態(tài)來(lái)表示漢字,而且常用漢字有六七千個(gè),這個(gè)時(shí)候,中國人民就使用了一套漢字方案叫做GB2312”。隨著(zhù)發(fā)展,又發(fā)現了一些局限,所以就有了GBK,再繼續往后增加了一些字符(如少數名族字體),GBK擴成了 GB18030。

            因為當時(shí)各個(gè)國家都像中國這樣搞出一套自己的編碼標準,結果互相之間誰(shuí)也不懂誰(shuí)的編碼,誰(shuí)也不支持別人的編碼,連大陸和臺灣這樣只相隔了150海里也使用不同編碼。這個(gè)時(shí)候,出現了一個(gè)叫 ISO 組織(國際標準化組織)決定著(zhù)手解決這個(gè)問(wèn)題。他們采用的方法很簡(jiǎn)單:廢了所有的地區性編碼方案,重新搞一個(gè)包括了地球上所有文化、所有字母和符號 的編碼!他們打算叫它“Universal Multiple-Octet Coded Character Set”,簡(jiǎn)稱(chēng) UCS, 俗稱(chēng) “Unicode”。

            但是Unicode同樣也有2個(gè)問(wèn)題:

            1.計算機怎么知道二個(gè)字節為一個(gè)字符,如何識別二個(gè)字節為什么一個(gè)字符?

            2.針對英文字符,如果使用大于1個(gè)字節來(lái)表示,那么低位的前面幾個(gè)字節全是0。很奢侈浪費空間,因為現在計算機大部分內容還是英文。


            unicode在很長(cháng)一段時(shí)間內無(wú)法推廣,直到互聯(lián)網(wǎng)的出現,為解決unicode如何在網(wǎng)絡(luò )上傳輸的問(wèn)題,于是面向傳輸的眾多 UTF(UCS Transfer Format)標準出現了。顧名思義,UTF-8就是每次8個(gè)位傳輸數據,而UTF-16就是每次16個(gè)位。UTF-8就是在互聯(lián)網(wǎng)上使用最廣的一種unicode的實(shí)現方式,這是為傳輸而設計的編碼,并使編碼無(wú)國界,這樣就可以顯示全世界上所有文化的字符了。 

            三、Charset and Encoding


            1.什么是字符編碼
            Charset (Character set) 字符集:是對字符抽象表示的集合。包括世界上各種文字、符合和字符。

            字符集只是一個(gè)規則集合的名字,對應到真實(shí)生活中,字符集就是對某種語(yǔ)言的稱(chēng)呼。例如:英語(yǔ),漢語(yǔ),日語(yǔ)。

            2.什么是字符編碼
            對于一個(gè)字符集來(lái)說(shuō)要正確編碼轉碼一個(gè)字符需要三個(gè)關(guān)鍵元素:字庫表(character repertoire)、編碼字符集(coded character set)、字符編碼(character encoding)。


            字庫表是一個(gè)相當于所有可讀或者可顯示字符的數據庫。字庫表決定了整個(gè)字符集能夠展現表示的所有字符的范圍。
            編碼字符集,即用一個(gè)編碼值code point來(lái)表示一個(gè)字符在字庫中的位置。
            字符編碼,將編碼字符集和實(shí)際存儲數值之間的轉換關(guān)系。

            四、UTF-8和Unicode的關(guān)系

            看完上面兩個(gè)概念解釋?zhuān)嘈拍銘撁靼灼渲嘘P(guān)系了。Unicode就是上文中提到的編碼字符集,而UTF-8就是字符編碼,即Unicode規則字庫的一種實(shí)現形式。隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,對同一字庫集的要求越來(lái)越迫切,Unicode標準也就自然而然的出現。它幾乎涵蓋了各個(gè)國家語(yǔ)言可能出現的符號和文字,并將為他們編號。

            五、進(jìn)一步理解UTF-8編碼

            UTF-8編碼為變長(cháng)編碼。最小編碼單位(code unit)為一個(gè)字節。一個(gè)字節的前1-3個(gè)bit為描述性部分,后面為實(shí)際序號部分。


            1.如果一個(gè)字節的第一位為0,那么代表當前字符為單字節字符,占用一個(gè)字節的空間。0之后的所有部分(7個(gè)bit)代表在Unicode中的序號。


            2.如果一個(gè)字節以110開(kāi)頭,那么代表當前字符為雙字節字符,占用2個(gè)字節的空間。110之后的所有部分(5個(gè)bit)加上后一個(gè)字節的除10外的部分(6個(gè)bit)代表在Unicode中的序號。且第二個(gè)字節以10開(kāi)頭。


            3.如果一個(gè)字節以1110開(kāi)頭,那么代表當前字符為三字節字符,占用3個(gè)字節的空間。110之后的所有部分(5個(gè)bit)加上后兩個(gè)字節的除10外的部分(12個(gè)bit)代表在Unicode中的序號。且第二、第三個(gè)字節以10開(kāi)頭。


            來(lái)看一個(gè)UTF-8編碼例子:


            發(fā)現其中規律:
            1個(gè)字節的UTF-8十六進(jìn)制編碼是以比8小的數字開(kāi)頭的
            2個(gè)字節的UTF-8十六進(jìn)制編碼是以C或D開(kāi)頭的
            3個(gè)字節的UTF-8十六進(jìn)制編碼是以E開(kāi)頭的



            關(guān)鍵字: ASCII碼 Unicode UTF-8 晨展科技

            文章連接: http://www.gostscript.com/cjwt/640.html

            版權聲明:文章由 晨展科技 整理收集,來(lái)源于互聯(lián)網(wǎng)或者用戶(hù)投稿,如有侵權,請聯(lián)系我們,我們會(huì )立即刪除。如轉載請保留

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.