ASCII, Unicode, UTF-8, 8進制, 16進制等各類編碼學習理解筆記

字符編碼的發展歷史

Unicode和UTF-8有何區別?javascript

在這個問題下的於洋的最高票回答中,比較完整地介紹了字符編碼的發展歷史,爲了便於記憶,再次簡要歸納一番。java

一個字節:最初一個字節的標準是混亂的,出現過4位、6位、7位的一字節標準,最終因爲歷史緣由和物理存儲需求(8位是2的3次方,方便物理存儲),因此採用了8位爲一個字節的標準。算法

ASCII:定下了8位爲一個字節後,那麼一個字節能夠表示的狀態就有256種(2^8),對應0-255號。接下來就須要考慮8位如何表示一個字符了,ASCII碼顧名思義(American Standard Code for Information Interchange)就是美國的信息交換標準碼,所以只須要表示出英文字母和少數的標點符號以及操做控制符號便可,因而人們把這些須要編碼的字符編到了0-127號(包括127),這種編碼方式就是ASCII碼。後來爲了知足更多地區的字符編碼的需求,127號以後的位置也被編碼了字符,包含了127號以後的ASCII碼被稱爲擴展ASCII碼網絡

GB2312等: 可是一個字節最多隻能編碼256個字符,對於世界上的語言字符來講遠遠不夠,好比中文的漢字就有許許多多,所以中國採用了GB2312GBKGB18030等雙字節字符集(DBCS)的編碼方案,還有各個地區和語言採用了各自的編碼方案,編碼方案不統一的問題就形成了很大的困擾。編碼

Unicode:面對這種困擾的局面,國際標準化組織(ISO)決定來解決這個問題,他們作了一個包含了地球上全部文化、字母、符號的編碼方案Unicode,而且統一採用雙字節,對於原來的單字節的符號,低位編碼不變,擴展其高位爲0變爲雙字節符號,這樣就解決了標準與統一的問題。設計

可是Unicode也有一些問題,一是計算機如何區分編碼爲Unicode字符仍是兩個ASCII字符,二是半角符號(就是原來的ASCII方案裏的一字節字符)只佔用了一個字節的空間,Unicode佔用了雙倍的空間,對於英文字母等半角字符來講,直接多佔用了一倍的空間,這是極大的浪費。所以,Unicode在很長的一段時間內難以推廣。code

UTF:直到後來UTF(UCS Transfer Format)標準的出現,Unicode才獲得更好的使用。UTF是一種字符在網絡上的傳輸方案,專爲數據傳輸而設計,UTF-16就是一次傳輸16位的數據,UTF-8就是一次傳輸8位的數據。其中UTF-8是使用最廣的一種Unicode的實現方式,它的一大特色就是它是一種變長度的編碼方式,當字符在ASCII碼範圍內是,使用一個字節表明一個字符,字符在別的範圍內時,又是另外的長度,好比中文使用三個字節的長度。UTF-8經過一些算法和規則來實現Unicode的轉換。orm

而在javascript中,\u表示使用Unicode編碼,好比\u0078表示字符x,\x表示使用16進制的ASCII碼,好比\x78也表示x,\[0-7][0-7][0-7]表示使用8進制的ASCII嗎,好比\170表示x。ip

總結:

編碼方案最初爲ASCII碼,且只用了0-127號,後來因爲須要使用更多字符的緣由,發展爲擴展ASCII碼,以後因爲各個地區和語言的不一樣,出現了許多編碼標準,好比中國的GB2312等。面臨這種局面,ISO制定了Unicode來實現編碼的統一,因爲Unicode的一些缺點,沒有獲得更大的推廣。直到UTF,尤爲是UTF-8這些傳輸方案的出現,Unicode獲得了大範圍的使用。get

另外在Javascript中,\u表示使用Unicode編碼,[0-7][0-7][0-7]表示使用8進制的ASCII碼,\x表示使用16進制的ASCII碼。

相關文章
相關標籤/搜索