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