久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

字符集編碼發(fā)展簡史

 Home of heart 2011-12-22
字符集編碼發(fā)展簡史

字符集編碼發(fā)展到今天,,其實(shí)經(jīng)歷了一個(gè)漫長而曲折的過程。從開始的ASCII,,到后來的ANSI,,再到現(xiàn)在的UNICODE

計(jì)算機(jī)是由發(fā)達(dá)資本主義國家發(fā)明的,,而這些國家基本都是英語國家,,用8位(256中狀態(tài))足以表示他們使用的所有符號(hào)(字母、數(shù)字,、標(biāo)點(diǎn)符號(hào),、控制字符等),而且還用不完(只用了前127號(hào)),,所以他們最終決定一個(gè)字節(jié)由8位(即8個(gè)晶體管)組成,。每個(gè)字節(jié)表示一個(gè)具體的符號(hào),然后將這些符號(hào)連起來就能表示世間萬物了,。這種編碼就是大名鼎鼎的ASCIIAmerican Standard Code for Information Interchange,,美國信息交換標(biāo)準(zhǔn)碼碼。

ASCII就是我們常說的SBCSsingle-bye charater set,,單字節(jié)字符集),。

剛開始只用了0x00-0x7f127個(gè)字符狀態(tài)),,后來又有新的語言國家使用了計(jì)算機(jī),這些國家便對(duì)127號(hào)以后的空位打起了注意,,并最終將256個(gè)字符全部用掉,,0x80-0xff127號(hào)以后)為擴(kuò)展字符集。至此人類再也沒有可用的字節(jié)了,。當(dāng)計(jì)算機(jī)來到中國的時(shí)候,,已經(jīng)沒有可用的字節(jié)狀態(tài)來表示漢子了。講到這里我想起了一手好玩的詩,,大體內(nèi)容是這樣的:

上帝創(chuàng)造了這個(gè)世界,,

可這個(gè)世界一片漆黑。

然后上帝又創(chuàng)造了牛頓,,

將這個(gè)世界變得一片光明,。

后來上帝又創(chuàng)造了愛因斯坦,

又將這個(gè)世界拉回到了黑暗中,。

            哈哈,,有意思吧。我覺得中國就是愛因斯坦,,將計(jì)算機(jī)的國際化推入了火坑之中,。但勤勞而富有創(chuàng)造力的中國人民堅(jiān)信,我們會(huì)將這個(gè)世界重新變光明的,。果然勇于創(chuàng)新的中國人民不負(fù)重望,,創(chuàng)造出了GB2313編碼規(guī)則。這種編碼規(guī)則的主旨是,,在原來的ASCII碼(127個(gè)基本字符)基礎(chǔ)上進(jìn)行的中文擴(kuò)展,,這里將之前定義的127之后的擴(kuò)展編碼全部卡掉,進(jìn)行重新定義,。其實(shí)這樣即使將127后的所有字符狀態(tài)全部用上,,也不能將中文字符全部表示,光常用的中文字符就有6千多個(gè),。中國人民的偉大才智再一次得到體現(xiàn),,一個(gè)字節(jié)不行,我可以用兩個(gè)字節(jié)嘛,。規(guī)定:一個(gè)小于127的字符意義與原來相同,,當(dāng)兩個(gè)大于127的字節(jié)連在一起,就表示一個(gè)漢字,,前面的一個(gè)字節(jié)(高字節(jié))從0xA1-0xF7,,后面一個(gè)字節(jié)(低字節(jié))從0xA1-0xFE。這樣我們大約可以組合出來7000多個(gè)簡體漢字了。在這里,,我們還把數(shù)學(xué)符號(hào),、羅馬希臘字母和日文的假名都編進(jìn)去了,連ASCII里的字符也都統(tǒng)統(tǒng)重新編了兩個(gè)字節(jié)長的編碼,。

            GB2312為常說的全角,,基本的ASCII碼(小于127)為半角。

            怪只怪中國的漢子實(shí)在是太多了,,后來發(fā)現(xiàn)還是不夠用,,于是干脆不再要求低字節(jié)一定小于127,只要第一個(gè)字節(jié)大于127,,就認(rèn)為是一個(gè)漢字的開始,,不管后面的字節(jié)是否小于127,,都要和第一個(gè)字節(jié)組成一個(gè)兩字節(jié)的漢字,。擴(kuò)展后的編碼方案被稱為GBK標(biāo)準(zhǔn),GBK包含了BG2312的所有內(nèi)容,,同時(shí)又增加了近20000個(gè)新的漢子(包括繁體字)和符號(hào),。

            后來少數(shù)民族也要用電腦了,于是我們?cè)贁U(kuò)展,,又加了幾千個(gè)新的少數(shù)民族的文字,,GBK擴(kuò)展成了BG18030。從此,,中華民族的文化就可以在計(jì)算機(jī)時(shí)代傳承了,。

            當(dāng)時(shí)各個(gè)國家和地區(qū)都搞出來自己的一套標(biāo)準(zhǔn)字符集編碼標(biāo)準(zhǔn),BIG5就是香港,、臺(tái)灣繁體中文區(qū)的字符集編碼標(biāo)準(zhǔn),。由于是各自獨(dú)立完成編碼標(biāo)準(zhǔn),所以最后互相不兼容,。如果想讓電腦顯示漢字就必須安裝“漢字系統(tǒng)”,,如果想正常顯示繁體就必須安裝一套BIG5編碼標(biāo)準(zhǔn)的“倚天漢字系統(tǒng)”。錯(cuò)裝了漢子系統(tǒng),,顯示就會(huì)全亂套,。

            以上將的GB2312GBK,、GB18030,、BIG5習(xí)慣稱之為MBCSmutil-byte charater set,多字節(jié)字符集),,不過這些編碼通常為兩個(gè)字節(jié),,所以有可稱為DBCSdouble-byte charater set,雙字節(jié)字符集),。

            所謂ANSIAmerican National Standards Institute,,美國國家標(biāo)準(zhǔn)學(xué)會(huì)編碼標(biāo)準(zhǔn)是只所有從基本ASCII碼基礎(chǔ)上發(fā)展起來的編碼標(biāo)準(zhǔn)(即DBCS),,比如擴(kuò)展的ASCII碼、GB2312,、GBK,、GB18030BIG5等,。每種編碼在ANSI標(biāo)準(zhǔn)中都為一頁,,比如encoding.gb2312頁代表GB2312字符集編碼。

            正在各個(gè)國家制定自己的DBCS編碼標(biāo)準(zhǔn)時(shí),,一個(gè)叫ISOInternational Organization for StandardizationInternational Standard Organized,,國際標(biāo)準(zhǔn)化組織)的國際組織決定著手解決這個(gè)問題。他們采用的方法很簡單:廢除了所有地區(qū)性編碼方案,,重新搞了一套可以包含地球上所有文化的文字和符號(hào)的編碼方案,。他們稱這個(gè)方案為Universal Multiple-Octet Coded Character Set(通用多8位編碼字符集),簡稱UCS,,所稱UNICODE,。ISO直接規(guī)定必須用兩個(gè)字節(jié),也就是16位來統(tǒng)一表示所有的字符,,對(duì)于ASCII里的那些“半角”字符,,UNICODE保持其原碼不變,只是將其由原來的8位擴(kuò)展為16位,,而其它文化和語言的字符則全部重新統(tǒng)一編碼,。由于“半角”英文符號(hào)只用到了低8位,所以其高8位永遠(yuǎn)是0,,這種大氣的方案在保存英文文檔時(shí)會(huì)多浪費(fèi)一倍的空間,。

                世間萬物總是聯(lián)系著的,自從DBCSUCSUNICODE)出現(xiàn)以后,,我們經(jīng)常使用的strlen函數(shù),,居然靠不住了。像中文這樣的字符不再當(dāng)成兩個(gè)字符了,,而是被當(dāng)成一個(gè),。在WINDOWS編程中,SBCSMBCS模式字符串的表示都是char*的形式(并且字符串中含有中文),,所以都能使用strlen進(jìn)行計(jì)算,,可計(jì)算出來的結(jié)果是不一樣的,如下:

                MBCS(多字節(jié)字符集編碼)情況下,,

                Char *s = “我們123456”;

                strlen(s)  == 10;

                _mbslen(s) == 8;

                相對(duì)于MBCS模式,,UNICODE相對(duì)容易理解些,因?yàn)?/SPAN>UNICODE模式下字符串用wchar_t*表示,是無法使用strlen或者_mbslen的,,只能使用wcslen,。

                這也就是為什么現(xiàn)在的CRTC運(yùn)行時(shí)庫)中的函數(shù)都有3種不同的形式:

                strlen:單字節(jié)字符集(SDCS

                _mbslen:多字節(jié)字符集(MDCSDBCS

                wcslen:通用多8位字符集(USCUNICODE

從前的多字符集時(shí)代,那些做多語言軟件的公司遇到過很多很大的麻煩,。他們?yōu)榱嗽诓煌膰忆N售同一款軟件,,不得不在區(qū)域化過程中,加裝那個(gè)多字節(jié)字符集,,這樣把軟件中的字符集轉(zhuǎn)來轉(zhuǎn)去,,是非常容易出錯(cuò)的。UNICODE的出現(xiàn)解決了這個(gè)問題,,只要裝上UNICODE字符集,,全世界的文字就都能認(rèn)識(shí)了。于是作為軟件行業(yè)老大的微軟將字節(jié)的操作系統(tǒng)Windows NT即以后的版本都改成了UNICODE版本了,。從這開始,,Windows再也不用加裝各種本土語言系統(tǒng),便可現(xiàn)實(shí)世界上所有文化的字符和符號(hào)了,。

由于UNICODE設(shè)計(jì)初期的局限性(并沒有考慮到與現(xiàn)有編碼的兼容性),,所以使得UNICODEGBKGB18030,、BG2312等)在排版上完全不一樣,,沒有一種簡單的算法可以把內(nèi)容從UNICODE編碼和兩一種編碼進(jìn)行轉(zhuǎn)換,這種轉(zhuǎn)換必須通過查表來進(jìn)行,。

使用UNICODE編碼標(biāo)準(zhǔn)可以組合出65535中不同的字符,,這已經(jīng)可以覆蓋世界上所有文化的字符和符號(hào)了。如果還不夠也沒關(guān)系,,ISO已經(jīng)準(zhǔn)備了UCS-4方案(我們通常使用的是UCS-2),,說簡單了就是用4個(gè)字節(jié)來表示一個(gè)字符,這樣的話我們理論上可以組合出將近43億個(gè)字符,,不過最高位為保留為,,所以只能組合出21億個(gè)字符,即使是21億個(gè),,我想用到的可能性也不大了吧,。

下面我們來看兩個(gè)例子:

1、字符串: “I am Chinese”

ANSI存儲(chǔ):12Bytes

UCS-2存儲(chǔ):24bytes + 2bytesheader

UCS-4存儲(chǔ):48bytes + 4bytesheader

2,、字符串:我是中國人

ANSI存儲(chǔ):10Bytes

UCS-2存儲(chǔ):10bytes + 2bytesheader  :FFFE/FEFF

UCS-4存儲(chǔ):20bytes + 4bytesheader

從上面兩個(gè)例子可以看出,,UNICODE編碼比ANSI編碼占用的空間要多,為了節(jié)省空間,。世人有發(fā)命令UTFUnicode Transformation Format,,Unicode轉(zhuǎn)換模式)編碼規(guī)則,版本有UTF-88-bit Unicode Transformation Format)、UTF-16,、UTF-32,。其實(shí),我覺得UTFUNICODE一樣,,是不同的編碼版本,。UTF是對(duì)UNICODE的特殊編碼。

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多