深刻理解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個字節。   編碼

----- 待更新翻譯

相關文章
相關標籤/搜索