unicode和 utf-8區別總結

作者:盛世唐朝
鏈接:https://www.zhihu.com/question/23374078/answer/69732605
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
 

從unicode開始,無論是半角的英文字母,還是全角的漢字,它們都是統一的”一個字符“!同時,也都是統一的”兩個字節“,請注意”字符”和”字節”兩個術語的不同,“字節”是一個8位的物理存貯單元,而“字符”則是一個文化相關的符號。在unicode中,一個字符就是兩個字節。一個漢字算兩個英文字符的時代已經快過去了。

 

unicode同樣也不完美,這裏就有兩個的問題,一個是,如何才能區別unicode和ascii?計算機怎麼知道三個字節表示一個符號,而不是分別表示三個符號呢?第二個問題是,我們已經知道,英文字母只用一個字節表示就夠了,如果unicode統一規定,每個符號用三個或四個字節表示,那麼每個英文字母前都必然有二到三個字節是0,這對於存儲空間來說是極大的浪費,文本文件的大小會因此大出二三倍,這是難以接受的。

 

unicode在很長一段時間內無法推廣,直到互聯網的出現,爲解決unicode如何在網絡上傳輸的問題,於是面向傳輸的衆多 UTF(UCS Transfer Format)標準出現了,顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是爲傳輸而設計的編碼,並使編碼無國界,這樣就可以顯示全世界上所有文化的字符了。UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度,當字符在ASCII碼的範圍時,就用一個字節表示,保留了ASCII字符一個字節的編碼做爲它的一部分,注意的是unicode一箇中文字符佔2個字節,而UTF-8一箇中文字符佔3個字節)。從unicode到utf-8並不是直接的對應,而是要過一些算法和規則來轉換。

 

Unicode符號範圍 | UTF-8編碼方式

(十六進制) | (二進制)
—————————————————————–
0000 0000-0000 007F | 0xxxxxxx

0000 0080-0000 07FF | 110xxxxx 10xxxxxx

0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

最後簡單總結一下:

  • 中國人民通過對 ASCII 編碼的中文擴充改造,產生了 GB2312 編碼,可以表示6000多個常用漢字。
  • 漢字實在是太多了,包括繁體和各種字符,於是產生了 GBK 編碼,它包括了 GB2312 中的編碼,同時擴充了很多。
  • 中國是個多民族國家,各個民族幾乎都有自己獨立的語言系統,爲了表示那些字符,繼續把 GBK 編碼擴充爲 GB18030 編碼。
  • 每個國家都像中國一樣,把自己的語言編碼,於是出現了各種各樣的編碼,如果你不安裝相應的編碼,就無法解釋相應編碼想表達的內容。
  • 終於,有個叫 ISO 的組織看不下去了。他們一起創造了一種編碼 UNICODE ,這種編碼非常大,大到可以容納世界上任何一個文字和標誌。所以只要電腦上有 UNICODE 這種編碼系統,無論是全球哪種文字,只需要保存文件的時候,保存成 UNICODE 編碼就可以被其他電腦正常解釋。
  • UNICODE 在網絡傳輸中,出現了兩個標準 UTF-8 和 UTF-16,分別每次傳輸 8個位和 16個位。於是就會有人產生疑問,UTF-8 既然能保存那麼多文字、符號,爲什麼國內還有這麼多使用 GBK 等編碼的人?因爲 UTF-8 等編碼體積比較大,佔電腦空間比較多,如果面向的使用人羣絕大部分都是中國人,用 GBK 等編碼也可以。

 

來源於網絡,出處實在無法考證,無法署名,有刪減修改,如有侵權請直接聯繫。

可能的原文:unicode,ansi,utf-8,unicode big endian編碼的區別網頁編碼就是那點事https://www.zhihu.com/question/23374078

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章