什么是Unicode
Unicode(統(tǒng)一碼、萬國(guó)碼、單一碼)是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界標(biāo)準(zhǔn),包括字符集、編碼方案等。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。1990年開始研發(fā),1994年正式公布。
Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,例如ISO 8859所定義的字符雖然在不同的國(guó)家中廣泛地使用,可是在不同國(guó)家間卻經(jīng)常出現(xiàn)不兼容的情況。很多傳統(tǒng)的編碼方式都有一個(gè)共同的問題,即容許電腦處理雙語環(huán)境(通常使用拉丁字母以及其本地語言),但卻無法同時(shí)支持多語言環(huán)境(指可同時(shí)處理多種語言混合的情況)。
作用
能夠使計(jì)算機(jī)實(shí)現(xiàn)跨語言、跨平臺(tái)的文本轉(zhuǎn)換及處理。
什么是ASCII
ASCII(American Standard Code for Information Interchange,美國(guó)信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言。它是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),并等同于國(guó)際標(biāo)準(zhǔn)ISO/IEC 646。
請(qǐng)注意,ASCII是American Standard Code for Information Interchange縮寫,而不是ASCⅡ(羅馬數(shù)字2),有很多人在這個(gè)地方產(chǎn)生誤解。
產(chǎn)生
計(jì)算機(jī)中,所有的數(shù)據(jù)在存儲(chǔ)和運(yùn)算時(shí)都要使用二進(jìn)制數(shù)表示(因?yàn)橛?jì)算機(jī)用高電平和低電平分別表示1和0),例如,像a、b、c、d這樣的52個(gè)字母(包括大寫)、以及0、1等數(shù)字還有一些常用的符號(hào)(例如*、#、@等)在計(jì)算機(jī)中存儲(chǔ)時(shí)也要使用二進(jìn)制數(shù)來表示,而具體用哪些二進(jìn)制數(shù)字表示哪個(gè)符號(hào),當(dāng)然每個(gè)人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通信而不造成混亂,那么大家就必須使用相同的編碼規(guī)則,于是美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織就出臺(tái)了ASCII編碼,統(tǒng)一規(guī)定了上述常用符號(hào)用哪些二進(jìn)制數(shù)來表示。
美國(guó)標(biāo)準(zhǔn)信息交換代碼是由美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)(American National Standard Institute , ANSI )制定的,標(biāo)準(zhǔn)的單字節(jié)字符編碼方案,用于基于文本的數(shù)據(jù)。起始于50年代后期,在1967年定案。它最初是美國(guó)國(guó)家標(biāo)準(zhǔn),供不同計(jì)算機(jī)在相互通信時(shí)用作共同遵守的西文字符編碼標(biāo)準(zhǔn),它已被國(guó)際標(biāo)準(zhǔn)化組織(International Organization for Standardization, ISO)定為國(guó)際標(biāo)準(zhǔn),稱為ISO 646標(biāo)準(zhǔn)。適用于所有拉丁文字字母。
表述方式
ASCII 碼使用指定的7 位或8 位二進(jìn)制數(shù)組合來表示128 或256 種可能的字符。標(biāo)準(zhǔn)ASCII 碼也叫基礎(chǔ)ASCII碼,使用7 位二進(jìn)制數(shù)(剩下的1位二進(jìn)制為0)來表示所有的大寫和小寫字母,數(shù)字0 到9、標(biāo)點(diǎn)符號(hào), 以及在美式英語中使用的特殊控制字符。其中:
0~31及127(共33個(gè))是控制字符或通信專用字符(其余為可顯示字符),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(響鈴)等;通信專用字符:SOH(文頭)、EOT(文尾)、ACK(確認(rèn))等;ASCII值為8、9、10 和13 分別轉(zhuǎn)換為退格、制表、換行和回車字符。它們并沒有特定的圖形顯示,但會(huì)依不同的應(yīng)用程序,而對(duì)文本顯示有不同的影響。
32~126(共95個(gè))是字符(32是空格),其中48~57為0到9十個(gè)阿拉伯?dāng)?shù)字。
65~90為26個(gè)大寫英文字母,97~122號(hào)為26個(gè)小寫英文字母,其余為一些標(biāo)點(diǎn)符號(hào)、運(yùn)算符號(hào)等。
同時(shí)還要注意,在標(biāo)準(zhǔn)ASCII中,其最高位(b7)用作奇偶校驗(yàn)位。所謂奇偶校驗(yàn),是指在代碼傳送過程中用來檢驗(yàn)是否出現(xiàn)錯(cuò)誤的一種方法,一般分奇校驗(yàn)和偶校驗(yàn)兩種。奇校驗(yàn)規(guī)定:正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是奇數(shù),若非奇數(shù),則在最高位b7添1;偶校驗(yàn)規(guī)定:正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是偶數(shù),若非偶數(shù),則在最高位b7添1。后128個(gè)稱為擴(kuò)展ASCII碼。許多基于x86的系統(tǒng)都支持使用擴(kuò)展(或“高”)ASCII。擴(kuò)展ASCII 碼允許將每個(gè)字符的第8 位用于確定附加的128 個(gè)特殊符號(hào)字符、外來語字母和圖形符號(hào)。
UNICODE與ASCII的區(qū)別
最早只有127個(gè)字母被編碼到計(jì)算機(jī)里,也就是大小寫英文字母、數(shù)字和一些符號(hào),這個(gè)編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。
但是要處理中文顯然一個(gè)字節(jié)是不夠的,至少需要兩個(gè)字節(jié),而且還不能和ASCII編碼沖突,所以,中國(guó)制定了GB2312編碼,用來把中文編進(jìn)去。
你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國(guó)把韓文編到Euc-kr里,各國(guó)有各國(guó)的標(biāo)準(zhǔn),就會(huì)不可避免地出現(xiàn)沖突,結(jié)果就是,在多語言混合的文本中,顯示出來會(huì)有亂碼。
因此,Unicode應(yīng)運(yùn)而生。Unicode把所有語言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問題了。
Unicode標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符,就需要4個(gè)字節(jié))?,F(xiàn)代操作系統(tǒng)和大多數(shù)編程語言都直接支持Unicode。
新的問題又出現(xiàn)了:如果統(tǒng)一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲(chǔ)空間,在存儲(chǔ)和傳輸上就十分不劃算。
1.ASCII的特點(diǎn)
ASCII 是用來表示英文字符的一種編碼規(guī)范。每個(gè)ASCII字符占用1 個(gè)字節(jié),因此,ASCII 編碼可以表示的最大字符數(shù)是255(00H—FFH)。這對(duì)于英文而言,是沒有問題的,一般只什么用到前128個(gè)(00H--7FH,最高位為0)。而最高位為1 的另128 個(gè)字符(80H—FFH)被稱為“擴(kuò)展ASCII”,一般用來存放英文的制表符、部分音標(biāo)字符等等的一些其它符號(hào)。
但是對(duì)于中文等比較復(fù)雜的語言,255個(gè)字符顯然不夠用。于是,各個(gè)國(guó)家紛紛制定了自己的文字編碼規(guī)范,其中中文的文字編碼規(guī)范叫做“GB2312—80”, 它是和ASCII 兼容的一種編碼規(guī)范, 其實(shí)就是利用擴(kuò)展ASCII沒有真正標(biāo)準(zhǔn)化這一點(diǎn),把一個(gè)中文字符用兩個(gè)擴(kuò)展ASCII 字符來表示,以區(qū)分ASCII 碼部分。
但是這個(gè)方法有問題,最大的問題就是中文的文字編碼和擴(kuò)展ASCII 碼有重疊。而很多軟件利用擴(kuò)展ASCII 碼的英文制表符來畫表格,這樣的軟件用到中文系統(tǒng)中,這些表格就會(huì)被誤認(rèn)作中文字符,出現(xiàn)亂碼。另外,由于各國(guó)和各地區(qū)都有自己的文字編碼規(guī)則,它們互相沖突,這給各國(guó)和各地區(qū)交換信息帶來了很大的麻煩。
2.UNICODE的產(chǎn)生
要真正解決這個(gè)問題,不能從擴(kuò)展ASCII 的角度入手,UNICODE作為一個(gè)全新的編碼系統(tǒng)應(yīng)運(yùn)而生,它可以將中文、法文、德文……等等所有的文字統(tǒng)一起來考慮,為每一個(gè)文字都分配一個(gè)單獨(dú)的編碼。
3.什么是UNICODE
Unicode與ASCII一樣也是一種字符編碼方法,它占用兩個(gè)字節(jié)(0000H—FFFFH),容納65536 個(gè)字符,這完全可以容納全世界所有語言文字的編碼。在Unicode 里,所有的字符都按一個(gè)字符來處理, 它們都有一個(gè)唯一的Unicode 碼。
4.使用UNICODE的好處
使用Unicode 編碼可以使您的工程同時(shí)支持多種語言, 使您的工程國(guó)際化。即在不同語言的系統(tǒng)下不至于產(chǎn)生亂碼。
評(píng)論