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