+計算機只能識別二進制數據。這種二進制數據稱為計算機的內碼。
-內碼指的是「將資訊編碼後,透過某種方式儲存在特定記憶裝置時,裝置內部的編碼形式」
-二進制數據格式如:1010100100101000,只有1和0。
-人類使用的是字符(character),它是文字和符號的總稱,如各種漢字,英文字母,數學符號,標點符號等。對計算以而言這些東西是無法理解的。
-為了讓計算機能存取字符,人類約定了字符和內碼的對應關系,這種對應關系稱為字符編碼(encoding)。
-各個國家和地區使用的字符不盡相同,如英國使用的是阿拉伯字母,中國使用的是漢字,日本使用日文。這些字符都是各個國家和地區的人類自己發明的。
+很多個字符的集合稱為“字符集”(Character Set),各個國家把特定的一些字符組成特定的字符集。所以世界上存在很多的字符集。如果把字符集與計算機的機器碼建立一一對應的關系,則我們稱這個字符集稱為編碼過的字符集(Coded Character Set)。因為各種字符集一般都建立了與計算機的對應關系,所以一般我們說的字符集都是指編碼過得字符集。
-需要根據字符集的數量來確定一個字符需要用幾位的機器碼來對應。如果一個字符集有8個字符,則每個字符用3位機器碼就可以表示。范圍是000-111。
+常見的字符集
+【ASCII】(American Standard Code for Information Interchange,美國信息互換標準代碼)是基于拉丁字母的字符集。它主要用于顯示現代英語。
+http://yangjun1120.spaces.live.com/blog/cns!F9D66F146BA5A776!425.entry?&_c02_owner=1
-ASCII碼是7位編碼,共128個字符。編碼范圍:0x00-0x7F。其中0x00-0x20 和0x7F共33個控制字符。
-只支持ASCII碼的系統會忽略每個字節的最高位,只認為低7位是有效位。
+http://zh.wikipedia.org/zh/ASCII
-ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是基于拉丁字母的字符集。它主要用于顯示現代英語。
-SCII第一次以規範標準的型態發表是在1967年,最後一次更新則是在1986年。
+至今為止共定義了128個字元;其中33個字元無法顯示(這是以現今作業系統為依歸,但在DOS模式下可顯示出一些諸如笑臉、撲克牌花式等8-bit符號)。
-這33個字元多數都已是陳廢的控制字元??刂谱衷挠猛局饕怯脕聿倏匾呀浱幚磉^的文字。
-在33個字元之外的是95個可顯示的字元,包含用鍵盤敲下空白鍵所產生的空白字元也算1個可顯示字元(顯示為空白)。
+缺點
-ASCII的最大缺點是只能顯示26個基本拉丁字母,因此只能用於顯示現代美國英語(而且在處理英語當中的外來詞如na?ve、café、élite等等時,所有重音符號都不得不去掉,即使這樣做會違反拼寫規則)。而EASCII雖然解決了部份西歐語言的顯示問題,但對更多其他語言依然無能為力。因此現在的蘋果電腦已經拋棄ASCII而轉用Unicode。
-ASCIIC收錄了空格及94個“可印刷字符”,足以給英語使用。但是,其他使用拉丁字母的語言(主要是歐洲國家的語言),都有一定數量的附加符號字母,故可以使用ASCII及控制字符以外的區域來儲存及表示。除了使用拉丁字母的語言外,使用西里爾字母的東歐語言、希臘語、泰語、現代阿拉伯語、希伯來語等,都可以使用這個形式來儲存及表示。
-【EASCII】(Extended ASCII,延伸美國標準信息交換碼)是將ASCII碼由7位擴充為8位而成。其中最常用的就是ISO 8859
+【ISO 8859】,全稱ISO/IEC 8859,是一系列8位字符集的標準規范,現定義了15個字符集。
+【ISO 8859-1】,正式編號為ISO/IEC 8859-1:1998,又稱Latin-1或“西歐語言”,是國際標準化組織內ISO/IEC 8859的第一個8位字符集。
-此字符集支援部分于歐洲使用的語言,包括阿爾巴尼亞語、巴斯克語、布列塔尼語、加泰羅尼亞語、丹麥語、荷蘭語、法羅語、弗里西語、加利西亞語、德語、格陵蘭語、冰島語、愛爾蘭蓋爾語、意大利語、拉丁語、盧森堡語、挪威語、葡萄牙語、里托羅曼斯語、蘇格蘭蓋爾語、西班牙語及瑞典語。
-英語可用7位編碼儲存,而其他使用拉丁字母、希臘字母、西里爾字母、希伯來字母等的語文,由于只使用數十個字母,傳統上均使用8位編碼的ISO/IEC 8859標準來表示。但由于漢語、日語及朝鮮語字數眾多,無法用單一個8位字符來表達,故需要多于一個字節來代表一個字。于是,ISO 2022就設計出來讓漢語、日語及朝鮮語可以使用數個7位編碼的字符來示。
+【ISO 2022】【區位碼】,全稱ISO/IEC 2022,由國際標準化組織(ISO)及國際電工委員會(IEC)聯合制定,是一個使用7位編碼表示漢語文字、日語文字或朝鮮文字的方法。
+ISO 2022使用“逃逸字串”(Escape sequence)。逃逸字串由1個“ESC”字符(0x1B),再由兩至三個字串組成。此標記代表它后面的字符,屬于下表字符集的文字。
-【逃逸字符】也叫轉義字符,代表了某個特定的意思,經常用在字符串的定義中,比如"\"就是C語言常用的逃逸字符。當我們在字符串中說明一個特別的字符時要用到,例如"\n"表示換行,"\r"表示回車,因為這些字符的ASCII碼不能直接放入字符串中因此需要用逃逸字符來表示,當編譯器碰到\n \r時會自動翻譯成ASCII的0xa, 0xd.
+【EUC】全名為Extended Unix Code,是一個使用8位編碼來表示字符的方法。
-它使用了一些兼容于ISO/IEC 2022區位碼的94x94編碼表,把每個區位加上0xA0來表示,以便兼容于ASCII。它主要用于表示及儲存漢語文字、日語文字及朝鮮文字。
+EUC-CN是GB 2312最常用的表示方法。瀏覽器編碼表上的“GB2312”,通常都是指“EUC-CN”表示法。
-EUC-CN可以理解為 GB2312的別名,和GB2312完全相同。
+【GB 2312】是中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》
http://zh.wikipedia.org/zh-cn/GB_2312
-由中國國家標準總局發布,1981年5 月1日實施。
-GB 2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個
-同時收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個字符。
-GB2312的編碼范圍是0xA1A1-0x7E7E,去掉未定義的區域之后可以理解為實際編碼范圍是0xA1A1-0xF7FE。
-GB 2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。
+GB 2312中對所收漢字進行了“分區”處理,每區含有94個漢字/符號。這種表示方式也稱為區位碼。
-01-09區為特殊符號。
-16-55區為一級漢字,按拼音排序。
-56-87區為二級漢字,按部首/筆畫排序。
-10-15區及88-94區則未有編碼。
-舉例來說,“啊”字是GB2312之中的第一個漢字,它的區位碼就是1601。
+區位碼與內碼的對應關系
-一個漢字的內碼占兩個字節,分別稱為高位字節與低位字節。
-這兩位字節與區位碼的關系如下: 內碼高位=區碼+A0H(H表示十六進制) 內碼低位=位碼+A0H。
+例如,漢字”啊”的區位碼為”1601″用十六進制表示即為”1001H”,則它的內碼為”B0A1H”。
-其中B0H為內碼的高位字節,A1H為內碼的低位字節。
-GB2312區域碼全表:
http://www.mytju.com/classCode/tools/QuWeiMa_FullList.asp
-對于人名、古漢語等方面出現的罕用字,GB 2312不能處理,這導致了后來GBK及GB 18030漢字字符集的出現。
+【GBK】全名為漢字內碼擴展規范,英文名Chinese Internal Code Specification。K 即是“擴展”所對應的漢語拼音(KuoZhan11)中“擴”字的聲母。GBK 來自中國國家標準代碼GB 13000.1-93。
-GBK編碼是 GB2312編碼的超集,向下完全兼容GB2312,同時GBK收錄了Unicode基本多文種平面中的所有CJK漢字。
-GBK還收錄了 GB2312不包含的 漢字部首符號、豎排標點符號等字符。
-GBK的整體編碼范圍是為0x8140-0xFEFE,不包括低字節是0×7F的組合。
-高字節范圍是0×81-0xFE,低字節范圍是0x40-7E和0x80-0xFE。
-范圍 第1字節 第2字節 編碼數 字數
水準 GBK/1 A1–A9 A1–FE 846 717
水準 GBK/2 B0–F7 A1–FE 6,768 6,763
水準 GBK/3 81–A0 40–FE (7F除外) 6,080 6,080
水準 GBK/4 AA–FE 40–A0 (7F除外) 8,160 8,160
水準 GBK/5 A8–A9 40–A0 (7F除外) 192 166
用戶定義 AA–AF A1–FE 564
用戶定義 F8–FE A1–FE 658
用戶定義 A1–A7 40–A0 (7F除外) 672
合計: 23,940 21,886
-上述GBK/1和GBK/2的領域即GB 2312-80用通常方法編碼的區域。
+低字節是 0x40-0x7E的GBK字符有一定特殊性,因為這些字符占用了ASCII碼的位置,與ASCII不兼容,這樣會給一些系統帶來麻煩。
-CP936和GBK的有些許差別,絕大多數情況下可以把CP936當作GBK的別名。
+【GB18030】全稱:國家標準GB 18030-2005《信息技術 中文編碼字符集》,是中華人民共和國現時最新的內碼字集.
-與GB 2312-1980完全兼容,與GBK基本兼容,支持GB 13000及Unicode的全部統一漢字,共收錄漢字70244個。
-與 UTF-8 相同,采用多字節編碼,每個字可以由1個、2個或4個字節組成。
-支持中國國內少數民族的文字,不需要動用造字區。
-漢字收錄范圍包含繁體漢字以及日韓漢字
+【Big5】,又稱為大五碼或五大碼,是使用繁體中文(正體中文)社區中最常用的計算機漢字字符集標準,共收錄13,060個漢字。
-Big5是雙字節編碼,高字節編碼范圍是0x81-0xFE,低字節編碼范圍是0x40-0x7E和0xA1-0xFE。
-和GBK相比,少了低字節是0x80-0xA0的組合。0x8140-0xA0FE是保留區域,用于用戶造字區。
-Big5收錄的漢字只包括繁體漢字,不包括簡體漢字,一些生僻的漢字也沒有收錄。GBK收錄的日文假名字符、俄文字符Big5也沒有收錄。
-因為Big5當中收錄的字符有限,因此有很多在Big5基礎上擴展的編碼,如倚天中文系統。
-Windows系統上使用的代碼頁CP950也可以理解為是對Big5的擴展,在Big5的基礎上增加了7個漢字和一些符號。
-因為Big5也占用了 ASCII的編碼空間(低字節所使用的0x40-0x7E),所以Big5編碼在一些環境下存在和GBK編碼相同的問題
+【UCS】通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標準所定義的字符編碼方式,采用4字節編碼。
-Unicode組織和ISO組織都試圖定義一個超大字符集,目的是要涵蓋所有語言使用的字符以及其他學科使用的一些特殊符號,這個字符集就是通用字符集(UCS,Universal Character Set)。
-這兩個組織經過協調,雖然在各自發展,但定義的字符位置是完全一致的。
-ISO 10646標準定義了一個31位的字符集。前兩個字節的位置(0x0000-0xFFFD)被稱為基本多語言面(Basic Multilingual Plane, BMP) ,超出兩個字節的范圍稱作輔助語言面。
-BMP基本包括了所有語言中絕大多數字符,所以只要支持BMP就可以支持絕大多數場合下的應用。Unicode 3.0對應的字符集在BMP范圍內。
-UCS字符集為每個字符分配了一個位置,通常用“U”再加上某個字符在UCS中位置的16進制數作為這個字符的UCS表示,例如“U+0041”表示字符“A”。
-UCS字符 U+0000到U+00FF與ISO-8859-1完全一致。
+【UCS-2】、【UTF-16】是UCS字符集(或者說是Unicode字符集)實際應用中的具體編碼方式。
+UCS-2是兩個字節的等寬編碼,因為只是使用了兩個字節的編碼空間,所以只能對BMP中的字符做編碼。
-UCS-2 不同于GBK和Big5,它是真正的等寬編碼,每個字符都使用兩個字節,這個特性在字符串截斷和字符數計算時非常方便。
+UTF-16是變長編碼,用兩個字節對BMP內的字符編碼,用4個字節對超出BMP范圍的輔助平面內的字符作編碼。
-UTF-16是UCS- 2的超集,UTF-16編碼的兩字節編碼方式完全和UCS-2相同。
+UCS-2和UTF- 16在存儲和傳輸時會使用兩種不同的字節序,分別是big endian和little endian(大尾和小尾)。UCS-2BE的別名。
-例如“啊”(U+554A)用big endian表示就是0x554A,用little endian表示就是0x4A55。UCS-2和UTF-16默認的字節序是big endian方式。
-在傳輸過程中為了說明字節序需要在字節流前加上BOM(Byte order Mark),0xFEFF表示是big endian,0xFFFE表示是little endian。
-UCS-2BE、UCS-2LE是實際應用中使用的編碼名稱,對應著big endian和little endian,UTF-16BE、UTF-16LE也是如此。
-因為默認是 BE字節序,所以可以把UCS-2當做是UCS-2BE的別名。
+【UTF-8】是UCS字符集的另一種編碼方式
-TF-16的每個單元是兩個字節(16位),而UTF-8的每個單元是一個字節(8位)。
-UTF-16中用一個或兩個雙字節表示一個字符,UTF-8中用一個或幾個單字節表示一個字符。
-可以認為UTF-8編碼是根據一定規律從UCS-2轉換得到的。
+從UCS-2到UTF- 8之間有以下轉換關系:
+UCS-2 UTF-8
U+0000 - U+007F 0xxxxxxx
U+0080 - U+07FF 110xxxxx 10xxxxxx
U+0800 - U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
-例如“啊”字的UCS- 2編碼是0x554A,對應的二進制是0101 0101 0100 1010,轉成UTF-8編碼之后的二進制是 1110 0101 10 010101 10 001010,對應的十六進制是0xE5958A。
+根據UTF-8的生成規律和UCS字符集的特性,可以看到UTF-8具有的特性:
-UTF-8完全和 ASCII兼容。
-大于U+007F的 UCS字符,在UTF-8編碼中至少是兩個字節。
-UTF-8中的每個字符編碼的首字節總在0x00-0xFD之間。
-根據首字節就可以判斷之后連續幾個字節。
-GBK編碼中的漢字字符都在UCS-2中的范圍都在U+0800 - U+FFFF之間,所以每個GBK編碼中的漢字字符的UTF-8編碼都是3個字節。
-但GBK中包含的其他字符的UTF-8編碼就不一定是3個字節了,如GBK中的俄文字符。
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請
點擊舉報。