ascll、Unicode、utf-8、gbk之間的區別


ascii:
在計算機內部,所有信息最終都是一個二進制值。每一個二進制位(bit),有0和1兩種狀態,因此,8個二進制位可以組合出256種狀態,這被稱為字節(byte)。上個世紀60年代,美國制定了一套字符編碼,對英文字符與二進制之間做了聯系,這被稱為ASCII碼,一直沿用至今。
ASCII碼一共規定了128個字符,比如SPACE是32,A是65,這128個符號只咱用了一個字節的后面七位,最前面的一位統一規定為0。


unicode:
世界上有多種編碼方法,同一個二進制數字可以被解釋稱不同的符號。因此,在打開一個文本文件時候,就必須知道它的編碼方式,用錯誤的編碼方式打開,就會出現亂碼。
Unicode編碼,這是一種所有符號的編碼。
Unicode顯然是一個巨大的集合,現在的規模可以容納100多萬個符號。每個符號的編碼都不一樣,比如U+0041表示英語的大寫字母A,U+4e25表示漢字嚴。
在Unicode龐大的字符集的優勢下,還存在一個問題,比如一個漢字,“嚴”的Unicode是十六進制4e25,轉成二進制足足有15位,也就是,這個符號需要2個字節,表示其他字符還存在3個字節或者更多。
計算機怎么區別三個字節表示的是同一個符號而不是分開表示三個呢?如果Unicode統一規定,每個符號用3個字節表示,
但是某些字母顯然不需要3個,那么就浪費了空間,文本文件大小超出了很多,這顯然是不合理的。直到UTF8字符編碼出現了。 utf
-8: UTF8的最大特點是,它是一種變長編碼,可以使用1-4個字節表示一個符號,根據不同的符號來變化字節長度。 UTF8編碼規則只有兩條: 1)對於單字節的符號,字節的第一位設為0,后面的7位為這個符號的Unicode碼。因此,對於英文字母,UTF8編碼和ASCII編碼是相同的。 2)對於非單字節(假設字節長度為N)的符號,第一個字節的前N位都設為1,第N+1設為0,后面字節的前兩位一律設為10,剩下的沒有提及的二進制,全部為這個符號的Unicode碼。 gbk: GBK編碼是對GB2312的擴展,完全兼容GB2312。采用雙字節編碼方案,剔出xx7F碼位,共23940個碼位,共收錄漢字和圖形符號21886個,GBK編碼方案於1995年12月15日發布。它幾乎完美支持漢字,因此經常會遇見GBK與Unicode的轉換。 1,各個編碼之間的二進制,是不能互相識別的,會產生亂碼。 2,文件的存儲,傳輸,不能是unicode (只能是utf-8 utf-16 gbk gbk2312 ascii等)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM