程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 中文編碼方式總結

中文編碼方式總結

編輯:C++入門知識

ASCII-----單字節編碼
ASCII 碼是使用指定的7 位或8 位二進制數組合來表示128 或256 種可能的字符。 ASCII 編碼可以表示的最大字符數年是 256,其實英文字符並沒有那麼多,一般只用前 128 個(最高位為了0),其中包括了控制字符、數字、大小寫字母和其他一些符號。而最高為1 的另128 個字符為“擴展ACSII”。
128 個字符,其中0x00~0x1F(0~31))、0x7F(127)是控制符。其他編碼 0x20~0x7E(32~126)則定義實際可見的字符,包括數字、大小寫英文字母、標點符號等。


GB2312-----中國人的簡體字編碼
GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼范圍高字節從B0-F7,低字節從 A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。GB2312-80中共收錄了7545個字符,用兩個字節編碼一個字符。每個字符最高位為0。
GB2312支持的漢字太少。1995年的漢字擴展規范GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字符。
GB2312中漢字的編碼范圍為,第一字節0xB0-0xF7(對應十進制為176-247),第二個字節0xA0-0xFE(對應十進制為160-254)。


GBK----中國人的簡繁編碼
GBK編碼(Chinese Internal Code Specification)是中國大陸制訂的、等同於UCS的新的中文編碼擴展國家標准。gbk編碼能夠用來同時表示繁體字和簡體字,而gb2312只能表示簡體字,gbk是兼容gb2312編碼的。
范圍:8140~FEFE(剔除xx7F)共23940個碼位。GBK中有碼位23940個,包含漢字21003個。
GBK 采用了單雙字節混合的方式。它兼容ASCII,因些0x~07F 部分的定義和ASCII 一樣。對其他字符,GBK中每個漢字仍然包含兩個字節,第一個字節的范圍是0x81-0xFE(即129-254)-----最高位必須是 1,第二個字節的范圍是0x40-0xFE(即64-254)。
 解碼時,需要逐個字節檢查具體如下:
1.如果這個字節的范圍是 0x00~0x7F,即最高位是 0 時,這個字節本身就代表一個字符,和 ASCII 的含義相同。
2.如果字節范圍 0x80~0xFF,即最高位為 1 時,還需要再取下一個字節,兩個字節合起來才表示一個字符。


Unicode----統一碼、萬國碼,java、python
Unicode編碼後的大小是一樣的.例如一個英文字母 "a" 和 一個漢字 "好",編碼後都是占用的空間大小是一樣的,都是兩個字節!
需要說明的是,定長編碼便於計算機處理(注意GB2312/GBK不是定長編碼),而unicode又可以用來表示所有字符,所以在很多軟件內部是使用unicode編碼來處理的,比如java。


UTF-8-----國際編碼,通用性好,前綴碼,從第一個字節就能知道這是個幾字節字
因為對於英文字母,unicode也需要兩個字節來表示。unicode不便於傳輸和存儲,因此而產生了utf編碼。
UTF8編碼後的大小是不一定,例如一個英文字母"a" 和 一個漢字 "好",編碼後占用的空間大小就不樣了,前者是一個字節,後者是三個字節!編碼的方法是從低位到高位。
其中UTF-16和Unicode編碼大致一樣, UTF-8就是以8位為單元對Unicode進行編碼。從Unicode到UTF-8的編碼方式如下:
Unicode編碼(16進制) UTF-8 字節流(二進制)
U+0000 - U+007F         0*** ****(0x00~0x7F)                                       字節最高位為了0,則它表示一個字符,和ASCII 解釋一樣
U+0080 - U+07FF         110* **** 10** ****(0xC0~0xDF)                      字節最高三位是110,則這是雙字節 編碼,用於其他字母字符
U+0800 - U+FFFF         1110 **** 10** **** 10** ****(0xE0~0xEF)        字節最高四位是 1110, 則這是三字節編碼,用於其他字符,如中文簡繁等
例如“漢”字的Unicode編碼是6C49。6C49在0800-FFFF之間,所以肯定要用3字節模板了:1110xxxx 10xxxxxx 10xxxxxx。將6C49寫成二進制是:0110 110001 001001, 用這個比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved