常見的字符編碼優缺點


 

總結一下常見的幾種編碼優缺點

 

ANSI編碼是一種對ASCII碼的拓展:ANSI編碼用0x00~0x7f (即十進制下的0127)范圍的1 個字節來表示 1 個英文字符,超出一個字節的 0x80~0xFFFF 范圍來表示其他語言的其他字符。也就是說,ANSI碼僅在前1280-127)個與ASCII碼相同,之后的字符全是某個國家語言的所有字符。值得注意的是,兩個字節最多可以存儲的字符數目是216次方,即65536個字符,這對於一個語言的字符來說,絕對夠了。還有ANSI編碼其實包括很多編碼:中國制定了GB2312編碼,用來把中文編進去另外,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標准。受制於當時的條件,不同語言之間的ANSI碼之間不能互相轉換,這就會導致在多語言混合的文本中會有亂碼

為了解決不同國家ANSI編碼的沖突問題,Unicode應運而生:如果全世界每一個符號都給予一個獨一無二的編碼,那么亂碼問題就會消失。這就是Unicode,就像它的名字都表示的,這是一種所有符號的編碼。

 

Unicode標准也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode

但是問題在於,原本可以用一個字節存儲的英文字母在Unicode里面必須存兩個字節(規則就是在原來英文字母對應ASCII碼前面補0),這就產生了浪費。那么有沒有一種既能消除亂碼,又能避免浪費的編碼方式呢?答案就是UTF-8

這是一種變長的編碼方式:它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度,當字符在ASCII碼的范圍時,就用一個字節表示,保留了ASCII字符一個字節的編碼做為它的一部分,如此一來UTF-8編碼也可以是為視為一種對ASCII碼的拓展。值得注意的是unicode編碼中一個中文字符占2個字節,而UTF-8一個中文字符占3個字節。從unicodeuft-8並不是直接的對應,而是要過一些算法和規則來轉換。

在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從文件讀取的UTF-8字符被轉換為Unicode字符到內存里,編輯完成后,保存的時候再把Unicode轉換為UTF-8保存到文件。

 

 GBK  擴展中文GB編碼(兼容了GB2312)更全

編碼方式:兩個字節表示一個漢字

英文字母或半角標點占用一個字節

Unicode:國際組織編碼,容納世界上所有的文字和符號的字符編碼

(1)包括UTF-32編碼

每個字符用一個int來表示  abcd 需要占用4int

特點:簡單,太浪費空間

(2)UTF-16編碼

特點:用12short來表示一個字符

(3)UTF-8 編碼

14個字節來表示一個字符(比較節省空間)

如果這個字符小(在000000-00007F之間)則用一個字節 ,一次類推如果該字符比較大比如漢字(數就比較大)占用兩個字節,這個字符如果在大就用三個字節


免責聲明!

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



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