b47617

          攀登!進步!
          隨筆 - 20, 文章 - 1, 評論 - 0, 引用 - 0
          數據加載中……

          轉 Unicode是什么.

          析Unicode和UTF-8

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

            首先說明一下現在常用的一些編碼方案:

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

          n???????? 最早制定的漢字編碼是 GB2312 ,包括 6763 個漢字和 682 個其它符號

          n???????? 95 年重新修訂了編碼,命名 GBK1.0 ,共收錄了 21886 個符號。

          n???????? 之后又推出了 GBK18030 編碼,共收錄了 27484 個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字,現在 WINDOWS 平臺必需要支持 GBK18030 編碼。

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

          ?

          2.???????? 臺灣,香港等地使用的是 BIG5 編碼

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

          2.????? Unicode

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

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

          ?

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

            就是將世界上所有的文字用2個字節統一進行編碼。可能你會問,2個字節最多能夠表示 65536 個編碼,夠用嗎?

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

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

            那樣,像這樣統一編碼,2個字節就已經足夠容納世界上所有的語言的大部分文字了。

          UCS-2 UCS-4

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

            現在用的是 UCS-2 ,即2個字節編碼,而 UCS-4 是為了防止將來2個字節不夠用才開發的。 UCS-2 也稱為基本多文種平面。

             UCS-2 轉換到 UCS-4 只是簡單的在前面加2個字節 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 個輔助平面,由原先的 65536 個編碼擴展至將近 100 萬編碼。

          3.????? 兼容 codepage

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

            這個時候就需要 codepage 了。

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

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

          以下是幾個常用的 codepage ,相應的修改上面的地址的數字即可。

          codepage=936 簡體中文 GBK

          codepage=950 繁體中文 BIG5

          codepage=437 美國 / 加拿大英語

          codepage=932 日文

          codepage=949 韓文

          codepage=866 俄文

          codepage=65001 unicode UFT-8

          ?

          最后一個 65001 ,據個人理解,應該只是一個虛擬的映射表,實際只是一個算法而已。

          ?

          936 中隨意取一行,例如:

          0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH

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

          通過查這張表,就能簡單的實現 GBK Unicode 之間的轉換。

          ?

          4.????? UTF-8

            現在明白了 Unicode ,那么 UTF-8 又是什么呢?又為什么會出現 UTF-8 呢?

             ASCII 轉換成 UCS-2 ,只是在編碼前插入一個 0x0 。用這些編碼,會包括一些控制符,比如 '' '/' ,這在 UNIX 和一些 C 函數中,將會產生嚴重錯誤。因此可以肯定, UCS-2 不適合作為 Unicode 的外部編碼。

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

          例:

          E4 BD A0          11100100 10111101 10100000

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

          4F 60            01001111 01100000

          這是“你”的 Unicode 編碼

          ?

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

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

          注意 UTF-8 的最前面3個 1 ,表示整個 UTF-8 串是由3個字節構成的。

          經過 UTF-8 編碼之后,再也不會出現敏感字符了,因為最高位始終為 1

          ?

          以下是 Unicode UTF-8 之間的轉換關系表:

          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 編碼轉換到 UTF-8, 簡單的把 Unicode 字節流套到 x 中就變成 UTF-8 了。

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 阿勒泰市| 禹州市| 四会市| 贵德县| 教育| 兴山县| 赤峰市| 综艺| 仙游县| 卓尼县| 巍山| 深水埗区| 宿迁市| 广宗县| 翁牛特旗| 和硕县| 南皮县| 伊通| 南充市| 禹城市| 阜阳市| 扎兰屯市| 东城区| 攀枝花市| 孟州市| 芜湖市| 苗栗县| 江陵县| 甘肃省| 卢湾区| 凤山市| 惠安县| 罗定市| 克拉玛依市| 琼海市| 曲周县| 苍南县| 田阳县| 兴化市| 睢宁县| 凉城县|