日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

字符編碼學習筆記

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

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多