1. 程式人生 > >ASCII、 Unicode 和 UTF8

ASCII、 Unicode 和 UTF8

abcd 表達 sci 因此 便是 存儲 clas 編碼方式 個數

  • ASCII: 英文字母與數字編號的一一對應。每個英文字母對應一個編號。範圍0~127
  • Unicode: 全世界所有語言中字符與數字編號的一一對應。也即為存在的每個字符指定一個唯一的編號。範圍為0~0x10FFFF。

所以,

ASCII與Unicode是類似的東西,都是為一個字符指定一個唯一的數字編號

只不過Unicode的範圍更大,能夠表示更多的字符。

在計算機的世界裏,只有數字,而不會有什麽字符。一個字符在計算機看來就是一個數字。ASCII與Unicode就是將字符與數字一一對應起來的映射。比如對於字符‘A‘,在計算機看來,它就是一個數字65。

當字符串被寫入文件時,也是將字符串中每個字符對應的數字編號保存在文件。

以上是ASCII和Unicode的相同點。那麽,二者有什麽區別?

一個顯著的區別是,對於同一段文本,二者保存到文件後占用的字節數不同。對於ASCII,每個數字編號占用一個字節。 而對於Unicode,每個編號則需要占用3個字節。因此對於同一段文本:‘abcd‘,采用ASCII格式保存時,文件的大小為4個字節。 采用Unicode保存時,文件的大小則為12個字節。

由此也可看出,當待保存文本為純英文字母時,

采用Unicode的存儲效率太低了

UTF8便是為了解決Unicode存儲效率低下而產生的。具體的規則就不講了,先來看一下UTF8能夠達到的效果。

對於相同的文本:‘abcd‘,Unicode需要12個字節,而UTF8只需要4個字節(和ASCII一樣,達到最優)。

UTF8之所以可以用一個字節存儲英文字母,是因此它使用了變長的編碼方式。也即,對於英文字母,它采用一個字節保存這個字符。對於英文字母之後的字符,它采用兩個字節保存這個字符。對於再之後的字符,采用三個字節保存。最多采用四個字節保存一個字符。

所以UTF8對於存儲英文字母的高效率來源於對之後字符保存效率的犧牲。這裏的合理性在於:如果待保存的文本中字符大多數為英文字母,則存儲效率能夠提高,因為大多數字符都是采用一個字節保存。

總結來說,

UTF8是對Unicode在存儲效率上的優化

以上便是三者的關系。

ASCII和Unicode都是為一個字符指定一個唯一的數字編號,Unicode能夠表達更多的字符,相當於是ASCII的擴展。Unicode存在存儲效率低下的問題,UTF8是在這個方面對Unicode的優化。

ASCII、 Unicode 和 UTF8