ASCII及相關(guān)標(biāo)準(zhǔn)
地球人都知道ASCII就是美國(guó)標(biāo)準(zhǔn)信息交換碼的縮寫(xiě),也知道ASCII規(guī)定用7位二進(jìn)制數(shù)字來(lái)表示英文字符,ASCII被定為國(guó)際標(biāo)準(zhǔn)之后的代號(hào)為ISO-646.由于ASCII碼只使用了7個(gè)二進(jìn)制位,也就是說(shuō)一個(gè)字節(jié)可以表示的256個(gè)數(shù)字中,它僅使用了0~127這128個(gè)碼位,剩下的128個(gè)碼位便可以用來(lái)做擴(kuò)展,用來(lái)表示一些特定語(yǔ)言所獨(dú)有的字符,因此對(duì)這多余的128個(gè)碼位的不同擴(kuò)展,就形成了一系列ISO-8859-*的標(biāo)準(zhǔn)。例如為英語(yǔ)作了專(zhuān)門(mén)擴(kuò)展的字符集編碼標(biāo)準(zhǔn)編號(hào)為ISO-8859-1,也叫做Latin-1,為希臘語(yǔ)所作的擴(kuò)展編號(hào)為ISO-8859-7等,完整的列表可以參考《Java Internationalization》一書(shū)。
Unicode與UCS
整個(gè)Unicode項(xiàng)目是由多家計(jì)算機(jī)軟件公司,還包括一些出版行業(yè)的公司共同發(fā)起的,從上世紀(jì)八十年代就已經(jīng)開(kāi)始。地球人都知道,對(duì)于日文,漢字來(lái)說(shuō),256個(gè)碼位是遠(yuǎn)遠(yuǎn)不夠用的(當(dāng)然,在當(dāng)時(shí)并不是地球人都知道,起碼設(shè)計(jì)計(jì)算機(jī)的老美們就不知道,甚至直到今天,還有老美以為米國(guó)是世界上的國(guó)家)。解決方法很直觀也很明顯,那就是采用碼位多到足夠包含所需字符數(shù)量的編碼方案(即俗話說(shuō)的頭痛醫(yī)頭,腳痛醫(yī)腳嘛)。這也是Unicode的目標(biāo)之一,能夠包含世界上所有語(yǔ)言的字符(包括漢字,日文,數(shù)學(xué)符號(hào),音樂(lè)符號(hào),還包括各種奇奇怪怪看也看不懂的東西比如象形文字,甲骨文 ,三個(gè)代表,科學(xué)發(fā)展觀等等,笑),這個(gè)理想,可以說(shuō)很遠(yuǎn)大,但很快被發(fā)現(xiàn)僅靠Unicode原先的設(shè)計(jì)無(wú)法實(shí)現(xiàn)。Unicode的另一個(gè)設(shè)計(jì)目標(biāo),對(duì)今天影響深遠(yuǎn),那就是對(duì)所有字符都采用16位編碼(即用一個(gè)大小不超過(guò)2的16次方的整數(shù)數(shù)字給每個(gè)字符編號(hào),注意從這個(gè)意義上也可以看出,Unicode是一種編碼字符集,而非字符集編碼)。說(shuō)這個(gè)設(shè)計(jì)目標(biāo)對(duì)現(xiàn)今影響深遠(yuǎn),完全不是表?yè)P(yáng),因?yàn)榈胶髞?lái)連Unicode的設(shè)計(jì)者也發(fā)現(xiàn),16位編碼僅有65536個(gè)碼位,遠(yuǎn)遠(yuǎn)不能容納世界上所有的字符,但當(dāng)意識(shí)到這個(gè)問(wèn)題的時(shí)候,Unicode大部分的規(guī)范已經(jīng)制定完畢,也有相當(dāng)程度的普及,完全推倒重來(lái)是不現(xiàn)實(shí)的。這成了一個(gè)遺留問(wèn)題,也是surrogate pair這種蹩腳解決方案的發(fā)端。
無(wú)獨(dú)有偶,在1984年,喜歡以繁多的編號(hào)糊弄群眾的國(guó)際標(biāo)準(zhǔn)化組織ISO也開(kāi)始著手制定解決不同語(yǔ)言字符數(shù)量太大問(wèn)題的解決方案,這一方案被稱(chēng)為Universal Character Set(UCS),正式的編號(hào)是ISO-10646(記得么,ASCII是ISO-646,不知這種安排是否是故意的)。還是ISO高瞻遠(yuǎn)矚,一開(kāi)始就確定了UCS是一個(gè)31位的編碼字符集(即用一個(gè)大小不超過(guò)2的31次方的整數(shù)數(shù)字為每個(gè)字符編號(hào)),這回真的足以容納古往今來(lái)所有國(guó)家,所有語(yǔ)言所包含的字符了(是的,任何國(guó)家,任何小語(yǔ)種都包括,也不管這些國(guó)家是與臺(tái)灣建交還是與中國(guó)大陸建交,是擁護(hù)民主制度還是實(shí)行恐怖主義,所以說(shuō)科學(xué)無(wú)國(guó)界)。雖然后來(lái)他們意識(shí)到,2的31次方個(gè)碼位又實(shí)在太多了……
天下大勢(shì),分久必合。無(wú)論Unicode還是UCS,最初的目的都是杜絕各種各樣名目繁多形式各異互不兼容老死不相往來(lái)的私用擴(kuò)展編碼(好啰嗦的一句話),結(jié)果兩方確立標(biāo)準(zhǔn)的同時(shí)(最初時(shí)這兩個(gè)標(biāo)準(zhǔn)是不兼容的),又形成了割據(jù),這對(duì)建設(shè)和諧社會(huì)是不利的,違反當(dāng)今世界和平與發(fā)展的主旋律,中國(guó)政府一向反對(duì)任何形式的霸權(quán)主義和強(qiáng)權(quán)政治,對(duì)以米國(guó)為首的發(fā)達(dá)國(guó)家……扯遠(yuǎn)了扯遠(yuǎn)了。1991年,Unicode聯(lián)盟與ISO的工作組終于開(kāi)始討論Unicode與UCS的合并問(wèn)題,雖然其后的合并進(jìn)行了很多年,Unicode初版規(guī)范中的很多編碼都需要被改寫(xiě),UCS也需要對(duì)碼空間的使用進(jìn)行必要限制,但成果是喜人的。最終,兩者統(tǒng)一了抽象字符集(即任何一個(gè)在Unicode中存在的字符,在UCS中也存在),且最靠前的65535個(gè)字符也統(tǒng)一了字符的編碼。對(duì)于碼空間,兩者同意以一百一十萬(wàn)為限(即兩者都認(rèn)為雖然65536不夠,但2的31次方又太大,一百一十萬(wàn)是個(gè)雙方都可接受的碼空間大小,也夠用,當(dāng)然,這里說(shuō)的一百一十萬(wàn)只是個(gè)約數(shù)),Unicode將碼空間擴(kuò)展到了一百一十萬(wàn),而UCS將永久性的不使用一百一十萬(wàn)以后的碼位。也就是說(shuō),現(xiàn)在再講Unicode只包含65536個(gè)字符是不對(duì)的。除了對(duì)已經(jīng)定義的字符進(jìn)行統(tǒng)一外,Unicode聯(lián)盟與ISO工作組也同意今后任何的擴(kuò)展工作兩者均保持同步,因此雖然從歷史的意義上講Unicode與UCS不是一回事(甚至細(xì)節(jié)上說(shuō)也不是一回事),但現(xiàn)在提起Unicode,指代兩者均無(wú)不妥。何的擴(kuò)展工作兩者均保持同步,因此雖然從歷史的意義上講Unicode與UCS不是一回事(甚至細(xì)節(jié)上說(shuō)也不是一回事),但現(xiàn)在提起Unicode,指代兩者均無(wú)不妥。
地球人都知道ASCII就是美國(guó)標(biāo)準(zhǔn)信息交換碼的縮寫(xiě),也知道ASCII規(guī)定用7位二進(jìn)制數(shù)字來(lái)表示英文字符,ASCII被定為國(guó)際標(biāo)準(zhǔn)之后的代號(hào)為ISO-646.由于ASCII碼只使用了7個(gè)二進(jìn)制位,也就是說(shuō)一個(gè)字節(jié)可以表示的256個(gè)數(shù)字中,它僅使用了0~127這128個(gè)碼位,剩下的128個(gè)碼位便可以用來(lái)做擴(kuò)展,用來(lái)表示一些特定語(yǔ)言所獨(dú)有的字符,因此對(duì)這多余的128個(gè)碼位的不同擴(kuò)展,就形成了一系列ISO-8859-*的標(biāo)準(zhǔn)。例如為英語(yǔ)作了專(zhuān)門(mén)擴(kuò)展的字符集編碼標(biāo)準(zhǔn)編號(hào)為ISO-8859-1,也叫做Latin-1,為希臘語(yǔ)所作的擴(kuò)展編號(hào)為ISO-8859-7等,完整的列表可以參考《Java Internationalization》一書(shū)。
Unicode與UCS
整個(gè)Unicode項(xiàng)目是由多家計(jì)算機(jī)軟件公司,還包括一些出版行業(yè)的公司共同發(fā)起的,從上世紀(jì)八十年代就已經(jīng)開(kāi)始。地球人都知道,對(duì)于日文,漢字來(lái)說(shuō),256個(gè)碼位是遠(yuǎn)遠(yuǎn)不夠用的(當(dāng)然,在當(dāng)時(shí)并不是地球人都知道,起碼設(shè)計(jì)計(jì)算機(jī)的老美們就不知道,甚至直到今天,還有老美以為米國(guó)是世界上的國(guó)家)。解決方法很直觀也很明顯,那就是采用碼位多到足夠包含所需字符數(shù)量的編碼方案(即俗話說(shuō)的頭痛醫(yī)頭,腳痛醫(yī)腳嘛)。這也是Unicode的目標(biāo)之一,能夠包含世界上所有語(yǔ)言的字符(包括漢字,日文,數(shù)學(xué)符號(hào),音樂(lè)符號(hào),還包括各種奇奇怪怪看也看不懂的東西比如象形文字,甲骨文 ,三個(gè)代表,科學(xué)發(fā)展觀等等,笑),這個(gè)理想,可以說(shuō)很遠(yuǎn)大,但很快被發(fā)現(xiàn)僅靠Unicode原先的設(shè)計(jì)無(wú)法實(shí)現(xiàn)。Unicode的另一個(gè)設(shè)計(jì)目標(biāo),對(duì)今天影響深遠(yuǎn),那就是對(duì)所有字符都采用16位編碼(即用一個(gè)大小不超過(guò)2的16次方的整數(shù)數(shù)字給每個(gè)字符編號(hào),注意從這個(gè)意義上也可以看出,Unicode是一種編碼字符集,而非字符集編碼)。說(shuō)這個(gè)設(shè)計(jì)目標(biāo)對(duì)現(xiàn)今影響深遠(yuǎn),完全不是表?yè)P(yáng),因?yàn)榈胶髞?lái)連Unicode的設(shè)計(jì)者也發(fā)現(xiàn),16位編碼僅有65536個(gè)碼位,遠(yuǎn)遠(yuǎn)不能容納世界上所有的字符,但當(dāng)意識(shí)到這個(gè)問(wèn)題的時(shí)候,Unicode大部分的規(guī)范已經(jīng)制定完畢,也有相當(dāng)程度的普及,完全推倒重來(lái)是不現(xiàn)實(shí)的。這成了一個(gè)遺留問(wèn)題,也是surrogate pair這種蹩腳解決方案的發(fā)端。
無(wú)獨(dú)有偶,在1984年,喜歡以繁多的編號(hào)糊弄群眾的國(guó)際標(biāo)準(zhǔn)化組織ISO也開(kāi)始著手制定解決不同語(yǔ)言字符數(shù)量太大問(wèn)題的解決方案,這一方案被稱(chēng)為Universal Character Set(UCS),正式的編號(hào)是ISO-10646(記得么,ASCII是ISO-646,不知這種安排是否是故意的)。還是ISO高瞻遠(yuǎn)矚,一開(kāi)始就確定了UCS是一個(gè)31位的編碼字符集(即用一個(gè)大小不超過(guò)2的31次方的整數(shù)數(shù)字為每個(gè)字符編號(hào)),這回真的足以容納古往今來(lái)所有國(guó)家,所有語(yǔ)言所包含的字符了(是的,任何國(guó)家,任何小語(yǔ)種都包括,也不管這些國(guó)家是與臺(tái)灣建交還是與中國(guó)大陸建交,是擁護(hù)民主制度還是實(shí)行恐怖主義,所以說(shuō)科學(xué)無(wú)國(guó)界)。雖然后來(lái)他們意識(shí)到,2的31次方個(gè)碼位又實(shí)在太多了……
天下大勢(shì),分久必合。無(wú)論Unicode還是UCS,最初的目的都是杜絕各種各樣名目繁多形式各異互不兼容老死不相往來(lái)的私用擴(kuò)展編碼(好啰嗦的一句話),結(jié)果兩方確立標(biāo)準(zhǔn)的同時(shí)(最初時(shí)這兩個(gè)標(biāo)準(zhǔn)是不兼容的),又形成了割據(jù),這對(duì)建設(shè)和諧社會(huì)是不利的,違反當(dāng)今世界和平與發(fā)展的主旋律,中國(guó)政府一向反對(duì)任何形式的霸權(quán)主義和強(qiáng)權(quán)政治,對(duì)以米國(guó)為首的發(fā)達(dá)國(guó)家……扯遠(yuǎn)了扯遠(yuǎn)了。1991年,Unicode聯(lián)盟與ISO的工作組終于開(kāi)始討論Unicode與UCS的合并問(wèn)題,雖然其后的合并進(jìn)行了很多年,Unicode初版規(guī)范中的很多編碼都需要被改寫(xiě),UCS也需要對(duì)碼空間的使用進(jìn)行必要限制,但成果是喜人的。最終,兩者統(tǒng)一了抽象字符集(即任何一個(gè)在Unicode中存在的字符,在UCS中也存在),且最靠前的65535個(gè)字符也統(tǒng)一了字符的編碼。對(duì)于碼空間,兩者同意以一百一十萬(wàn)為限(即兩者都認(rèn)為雖然65536不夠,但2的31次方又太大,一百一十萬(wàn)是個(gè)雙方都可接受的碼空間大小,也夠用,當(dāng)然,這里說(shuō)的一百一十萬(wàn)只是個(gè)約數(shù)),Unicode將碼空間擴(kuò)展到了一百一十萬(wàn),而UCS將永久性的不使用一百一十萬(wàn)以后的碼位。也就是說(shuō),現(xiàn)在再講Unicode只包含65536個(gè)字符是不對(duì)的。除了對(duì)已經(jīng)定義的字符進(jìn)行統(tǒng)一外,Unicode聯(lián)盟與ISO工作組也同意今后任何的擴(kuò)展工作兩者均保持同步,因此雖然從歷史的意義上講Unicode與UCS不是一回事(甚至細(xì)節(jié)上說(shuō)也不是一回事),但現(xiàn)在提起Unicode,指代兩者均無(wú)不妥。何的擴(kuò)展工作兩者均保持同步,因此雖然從歷史的意義上講Unicode與UCS不是一回事(甚至細(xì)節(jié)上說(shuō)也不是一回事),但現(xiàn)在提起Unicode,指代兩者均無(wú)不妥。

