1. 程式人生 > >APP開發實戰16-字符集和編碼

APP開發實戰16-字符集和編碼

5.2字符集

ASCII及其擴充套件字符集

作用:表語英語及西歐語言。

位數:ASCII是用7位表示的,能表示128個字元;其擴充套件使用8位表示,表示256個字元。

範圍:ASCII從00到7F,擴充套件從00到FF。

ISO-8859-1字符集

作用:擴充套件ASCII,表示西歐、希臘語等。

位數:8位,

範圍:從00到FF,相容ASCII字符集。

GB2312字符集
作用:國家簡體中文字符集,相容ASCII。
位數:使用2個位元組表示,能表示7445個符號,包括6763個漢字,幾乎覆蓋所有高頻率漢字。
範圍:高位元組從A1到F7, 低位元組從A1到FE。將高位元組和低位元組分別加上0XA0即可得到編碼。
BIG5字符集
作用:統一繁體字編碼。
位數:使用2個位元組表示,表示13053個漢字。
範圍:高位元組從A1到F9,低位元組從40到7E,A1到FE。
GBK字符集
作用:它是GB2312的擴充套件,加入對繁體字的支援,相容GB2312。
位數:使用2個位元組表示,可表示21886個字元。
範圍:高位元組從81到FE,低位元組從40到FE。
GB18030字符集
作用:它解決了中文、日文、朝鮮語等的編碼,相容GBK。
位數:它採用變位元組表示(1 ASCII,2,4位元組)。可表示27484個文字。
範圍:1位元組從00到7F; 2位元組高位元組從81到FE,低位元組從40到7E和80到FE;4位元組第一三位元組從81到FE,第二四位元組從30到39。
UCS字符集
作用:國際標準 ISO 10646 定義了通用字符集 (Universal CharacterSet)。它是與UNICODE同類的組織,UCS-2和UNICODE相容。
位數:它有UCS-2和UCS-4兩種格式,分別是2位元組和4位元組。
範圍:目前,UCS-4只是在UCS-2前面加了0×0000。
UNICODE字符集
作用:為世界650種語言進行統一編碼,相容ISO-8859-1。
位數:UNICODE字符集有多個編碼方式,分別是UTF-8,UTF-16和UTF-32。

5.3 編碼

UTF-8:

採用變長位元組 (1 ASCII, 2 希臘字母, 3 漢字, 4 平面符號) 表示。在網路傳輸時, 即使錯了一個位元組,不影響其他位元組,而雙位元組只要一個錯了,其他也錯了,具體如下:
    如果只有一個位元組則其最高二進位制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進位制位值為1的個數決定了其編碼的位元組數,其餘各位元組均以10開頭。UTF-8最多可用到6個位元組。
UTF-16:

採用2位元組,Unicode中不同部分的字元都同樣基於現有的標準。這是為了便於轉換。

從 0×0000到0×007F是ASCII字元,

從0×0080到0×00FF是ISO-8859-1對ASCII的擴充套件。

希臘字母表使用從0×0370到 0×03FF 的程式碼,

斯拉夫語使用從0×0400到0×04FF的程式碼,

美國使用從0×0530到0×058F的程式碼,

希伯來語使用從0×0590到0×05FF的程式碼。

中國、日本和韓國的象形文字(總稱為CJK)佔用了從0×3000到0×9FFF的程式碼;由於0×00在c語言及作業系統檔名等中有特殊意義,故很多情況下需要UTF-8編碼儲存文字,去掉這個0×00。舉例如下:
UTF-16: 0×0080  = 0000 0000 1000 0000
UTF-8:   0xC280 = 1100 0010 1000 0000
UTF-32:採用4位元組。
優缺點
    UTF-8、UTF-16和UTF-32都可以表示有效編碼空間 (U+000000-U+10FFFF) 內的所有Unicode字元。
    使用UTF-8編碼時ASCII字元只佔1個位元組,儲存效率比較高,適用於拉丁字元較多的場合以節省空間。
    對於大多數非拉丁字元(如中文和日文)來說,UTF-16所需儲存空間最小,每個字元只佔2個位元組。
    Windows NT核心是Unicode(UTF-16),採用UTF-16編碼在呼叫系統API時無需轉換,處理速度也比較快。
    採用UTF-16和UTF-32會有Big Endian和Little Endian之分,而UTF-8則沒有位元組順序問題,所以UTF-8適合傳輸和通訊。
    UTF-32採用4位元組編碼,一方面處理速度比較快,但另一方面也浪費了大量空間,影響傳輸速度,因而很少使用。