從 ASCII 到 UTF-8 : 大話編碼
話說當(dāng)年,老美搞出了ASCII編碼,用8個(gè)bit表示一個(gè)字符, 解決了計(jì)算機(jī)存儲(chǔ)人類語言的問題. 要說當(dāng)時(shí)那幫人真是有點(diǎn)小家子氣,只顧解決英語,數(shù)字和一些簡(jiǎn)單符號(hào) 的存儲(chǔ)問題,壓根就沒想過中文啊,拉丁文啊,藏文啊啥的怎么存儲(chǔ)的問題. 隨著計(jì)算機(jī)越來越普及,這個(gè)問題也就越來越尖銳了,總不能讓全世界人民 都使用英語吧?于是,有這么兩個(gè)組織,一個(gè)曰ISO,一個(gè)曰unicode組織,就開始 想辦法了... unicode想的辦法比較簡(jiǎn)單,不是1個(gè)byte不夠嘛?咱用兩個(gè)byte存,大概夠了吧? 這就是unicode 1.0 的實(shí)現(xiàn). 要說人家ISO就是大氣,也可能決策者們沒過過幾十K內(nèi)存的苦日子, 大筆一揮,不就是1個(gè)byte不夠嗎?用4個(gè)byte夠了吧?再用個(gè)幾百年也夠了吧? 這就是 ucs-4 的雛型. 隨著一些稀奇古怪的文字需要并入unicode,unicode的決策者有點(diǎn)冒汗了, 咱有這么多稀奇古怪的字母呢? 要不再加點(diǎn), 用 2byte + 4 bit 來存吧.. 那4bit做為頭,這下就又能表示很多奇怪的文字了.... 這就是 unicode 2.0 的雛型 現(xiàn)在有了兩套風(fēng)格迥異的編碼方式, 到底該用那個(gè)呢? 于是 unicode 組織 和 ISO 組織 達(dá)成了協(xié)議,就是你中有我,我中有你, ucs-4 盡管有 32 bit 編碼空間,只用 20 bit ,和 unicode 保持統(tǒng)一,unicode不作修改 這就是 ucs-4 和 unicode 2.0 了,狼狽為奸的結(jié)果 ![]() 后來在 2000 年 8 月 ,unicode 的工作人員為了顯得自己不是吃白食的, 就小小修改了一下 unicode 2.0 的文檔,做為unicode 3.0 發(fā)布了.沒加一個(gè)新字符啊!!!!!! (實(shí)際上, 有大約12種當(dāng)前語言 和 數(shù)十種古代語言,如雅瑪語,古希臘B類線形文字, 古波斯碶型文字還沒有得到支持) 至此,編碼方案算是統(tǒng)一了,接下來,咬牙切齒罵街的就變成程序員們了. 程序員的憤怒是有道理的,比如輸入一篇100字的英文文章,如果用ASCII 編碼,僅需要 100 byte ,而如果出現(xiàn)了哪怕一個(gè)古怪的字符而不得不用ucs-4 , 就需要 400 byte ! 這對(duì)早期的程序員來說簡(jiǎn)直是災(zāi)難...就算對(duì)帶寬有限得今天, 這也是個(gè)很重要得問題.. 于是IETF推出了 UTF- 8 和 UTF-16 兩種解決方案 (utf32用的太少,忽略) utf 8 實(shí)際上是最聰明的編碼方式,簡(jiǎn)單說,規(guī)則有三條 (1) ASCII 編碼不變, 用 1 個(gè)byte 表示 (2) 一個(gè) byte 不夠 ,就用兩個(gè) byte (3)兩個(gè)還不夠,就用三個(gè)byte,什么?還不夠? 不可能,3個(gè)byte已經(jīng)超過unicode 的表示極限了..你是外星人嗎? 它帶來了如下兩大好處: (1)平臺(tái)無關(guān)性,windows下用UTF-8寫的小說,別人在unix下照樣能看.. (2)有標(biāo)記位,一個(gè)字讀不出來,不影響其他字. utf 16 則是給笨一點(diǎn)的程序員準(zhǔn)備的,簡(jiǎn)單說,規(guī)則有兩條 (1) unicode 1.0 中的字符完全照搬 ,用2個(gè)byte (2) unicode 2.0 繼續(xù)照搬, 需要用 20 bit 表示的字符,用 2byte + 4bit 處理. 這下帶來的可不是一點(diǎn)兩點(diǎn)的壞處, (1)由于是變長(zhǎng),且不按計(jì)算機(jī)字長(zhǎng)(8bit)來變長(zhǎng),所以用utf16編碼的 東東的解碼就和CPU,操作系統(tǒng)的處理方式相關(guān)了,不利于交流 (2)一些本來具有特殊意義的字符無法被計(jì)算機(jī)正常處理 (3)以上兩條就可以判它死刑了...其他害處不一一列舉, 但是utf16最省空間倒是真的.畢竟是緊湊編碼的,沒有大段大段的000000000出現(xiàn).... 實(shí)際上,IETF比較希望UTF-8成為事實(shí)標(biāo)準(zhǔn)(RFC2279), 而UTF-16,也就是賣ISO和unicode個(gè)面子,實(shí)現(xiàn)一下而已(RFC2781) 而現(xiàn)實(shí)中,由于UTF-8的優(yōu)異性能,得到了廣泛的認(rèn)可和使用. 比如現(xiàn)在大紅大紫的XML,在XML1.0第二版規(guī)范中明確指出, 當(dāng)用戶沒有指定XML文檔的 encoding 屬性的時(shí)候,自動(dòng)使用 UTF-8編解碼 (盡管我強(qiáng)烈建議大家注明 encoding 屬性) 轉(zhuǎn)自http://www./441/viewspace-354.html |
|