b47617

          攀登!進(jìn)步!
          隨筆 - 20, 文章 - 1, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          轉(zhuǎn) Unicode是什么.

          析Unicode和UTF-8

          1.????? 各地的方言

            首先說明一下現(xiàn)在常用的一些編碼方案:

          1.???????? 在中國,大陸最常用的就是 GBK18030 編碼,除此之外還有 GBK GB2312 ,這幾個(gè)編碼的關(guān)系是這樣的。

          n???????? 最早制定的漢字編碼是 GB2312 ,包括 6763 個(gè)漢字和 682 個(gè)其它符號(hào)

          n???????? 95 年重新修訂了編碼,命名 GBK1.0 ,共收錄了 21886 個(gè)符號(hào)。

          n???????? 之后又推出了 GBK18030 編碼,共收錄了 27484 個(gè)漢字,同時(shí)還收錄了藏文、蒙文、維吾爾文等主要的少數(shù)民族文字,現(xiàn)在 WINDOWS 平臺(tái)必需要支持 GBK18030 編碼。

          按照 GBK18030 GBK GB2312 的順序,3種編碼是向下兼容,同一個(gè)漢字在三個(gè)編碼方案中是相同的編碼。

          ?

          2.???????? 臺(tái)灣,香港等地使用的是 BIG5 編碼

          3.???????? 日本: SJIS 編碼

          2.????? Unicode

            如果把各種文字編碼形容為各地的方言,那么 Unicode 就是世界各國合作開發(fā)的一種語言。

            在這種語言環(huán)境下,不會(huì)再有語言的編碼沖突,在同屏下,可以顯示任何語言的內(nèi)容,這就是 Unicode 的最大好處。

          ?

            那么 Unicode 是如何編碼的呢?其實(shí)非常簡單。

            就是將世界上所有的文字用2個(gè)字節(jié)統(tǒng)一進(jìn)行編碼。可能你會(huì)問,2個(gè)字節(jié)最多能夠表示 65536 個(gè)編碼,夠用嗎?

            韓國和日本的大部分漢字都是從中國傳播過去的,字型是完全一樣的。

            比如:“文”字, GBK SJIS 中都是同一個(gè)漢字,只是編碼不同而已。

            那樣,像這樣統(tǒng)一編碼,2個(gè)字節(jié)就已經(jīng)足夠容納世界上所有的語言的大部分文字了。

          UCS-2 UCS-4

             Unicode 的學(xué)名是 "Universal Multiple-Octet Coded Character Set" ,簡稱為 UCS

            現(xiàn)在用的是 UCS-2 ,即2個(gè)字節(jié)編碼,而 UCS-4 是為了防止將來2個(gè)字節(jié)不夠用才開發(fā)的。 UCS-2 也稱為基本多文種平面。

             UCS-2 轉(zhuǎn)換到 UCS-4 只是簡單的在前面加2個(gè)字節(jié) 0

             UCS-4 則主要用于保存輔助平面,例如 Unicode 4.0 中的第二輔助平面

             20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF -    26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF

            總共增加了 16 個(gè)輔助平面,由原先的 65536 個(gè)編碼擴(kuò)展至將近 100 萬編碼。

          3.????? 兼容 codepage

            那么既然統(tǒng)一了編碼,如何兼容原先各國的文字編碼呢?

            這個(gè)時(shí)候就需要 codepage 了。

            什么是 codepage codepage 就是各國的文字編碼和 Unicode 之間的映射表。

            比如簡體中文和 Unicode 的映射表就是 CP936 ,點(diǎn) 這里 查看官方的映射表。

          以下是幾個(gè)常用的 codepage ,相應(yīng)的修改上面的地址的數(shù)字即可。

          codepage=936 簡體中文 GBK

          codepage=950 繁體中文 BIG5

          codepage=437 美國 / 加拿大英語

          codepage=932 日文

          codepage=949 韓文

          codepage=866 俄文

          codepage=65001 unicode UFT-8

          ?

          最后一個(gè) 65001 ,據(jù)個(gè)人理解,應(yīng)該只是一個(gè)虛擬的映射表,實(shí)際只是一個(gè)算法而已。

          ?

          936 中隨意取一行,例如:

          0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH

          前面的編碼是 GBK 的編碼,后面的是 Unicode

          通過查這張表,就能簡單的實(shí)現(xiàn) GBK Unicode 之間的轉(zhuǎn)換。

          ?

          4.????? UTF-8

            現(xiàn)在明白了 Unicode ,那么 UTF-8 又是什么呢?又為什么會(huì)出現(xiàn) UTF-8 呢?

             ASCII 轉(zhuǎn)換成 UCS-2 ,只是在編碼前插入一個(gè) 0x0 。用這些編碼,會(huì)包括一些控制符,比如 '' '/' ,這在 UNIX 和一些 C 函數(shù)中,將會(huì)產(chǎn)生嚴(yán)重錯(cuò)誤。因此可以肯定, UCS-2 不適合作為 Unicode 的外部編碼。

            因此,才誕生了 UTF-8 。那么 UTF-8 是如何編碼的?又是如何解決 UCS-2 的問題呢?

          例:

          E4 BD A0          11100100 10111101 10100000

          這是“你”字的 UTF-8 編碼

          4F 60            01001111 01100000

          這是“你”的 Unicode 編碼

          ?

          按照 UTF-8 的編碼規(guī)則,分解如下: xxxx0100 xx111101 xx100000

          把除了 x 之外的數(shù)字拼接在一起,就變成“你”的 Unicode 編碼了。

          注意 UTF-8 的最前面3個(gè) 1 ,表示整個(gè) UTF-8 串是由3個(gè)字節(jié)構(gòu)成的。

          經(jīng)過 UTF-8 編碼之后,再也不會(huì)出現(xiàn)敏感字符了,因?yàn)樽罡呶皇冀K為 1

          ?

          以下是 Unicode UTF-8 之間的轉(zhuǎn)換關(guān)系表:

          U-00000000 - U-0000007F: 0xxxxxxx

          U-00000080 - U-000007FF: 110xxxxx 10xxxxxx

          U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

          U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

          U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

          U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

          ?

          Unicode 編碼轉(zhuǎn)換到 UTF-8, 簡單的把 Unicode 字節(jié)流套到 x 中就變成 UTF-8 了。

          posted on 2006-03-21 21:26 原語 閱讀(473) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 天等县| 朝阳区| 玛纳斯县| 澳门| 井研县| 石门县| 定襄县| 西安市| 长泰县| 仁布县| 永安市| 临沭县| 贵德县| 南皮县| 巨鹿县| 泽州县| 洪泽县| 阿拉善右旗| 南郑县| 五指山市| 卫辉市| 安义县| 顺平县| 云林县| 双流县| 德安县| 太谷县| 丹棱县| 东丽区| 仁寿县| 乌拉特后旗| 玛纳斯县| 弥渡县| 文水县| 宜阳县| 宜君县| 庆城县| 大洼县| 砀山县| 永州市| 仁布县|