• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 15,comments - 21,trackbacks - 0
            如果你對能很快回答出unicode和utf-8的關系,你可以直接跳過這篇文章。下面我來說說兩者的關系和轉換。(本文使用符號2字代表所有的漢字,英文,數字等)
            首先明確一點,UTF-8是UNICODE一種實現方式。
            UNICODE:代表一種符號集合,它規定了一種符合的二進制表示,沒有指明存儲方式。(http://www.unicode.org/)
            UTF-8:實現了UNICODE,使用多字節的存儲方式。
            我們先來考慮幾個問題。
            第一,如果使用單字節表示符號,很明顯,完全不夠用
            第二,如果使用多字節表示符號,那么,機器在讀取的時候,它怎么知道3個字節表示一個符號,還是表示3個符號
            第三,如果使用2個字節表示一個符號,首先,最多能表示65535個字符還是會不夠用,就算夠用,比如ASCII碼這類僅需1個字節就可以表示的符號,用2個字節表示,浪費空間了。
            因此,UTF-8孕育而生。
            首先UTF-8使用變長表示符號,簡單的說,有的時候用1個字節表示符號,有的時候用2個字節表示符號,這樣解決了浪費空間的問題。那么,如何解決第二個問題的呢,我們得了解下UFT-8的編碼規則。
            1.對于單字節的符號,字節第一個為0,后面7為為這個符號的unicode碼
            2.對于N字節的符號(N>1),第一個字節前N位為1,第N+1位為0,后面字節的前兩位設為10,剩下可編碼的位,為該符號的UNICODE編碼。
            這里我從網上找了一副圖
                           Unicode符號范圍 | UTF-8編碼方式
                                    (十六進制) | (二進制)
            0000 0000-0000 007F | 0xxxxxxx
            0000 0080-0000 07FF | 110xxxxx 10xxxxxx
            0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
            0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
            下面我具體解釋下這幅圖。
            首先看第一行,它的意思是00000000到0000007F的UNICODE編碼,對應的UTF-8的編碼方式為0XXXXXXX(X表示可編碼位,不足的補0)。
            第二行表示00000080到000007FF的UNICODE編碼,對應的UTF-8的編碼方式為110XXXXX 10XXXXXX。以此類推
            那么,問題是,這個范圍是怎么定的?
            很簡單,我們還是從第一行說起。007F,實際有效位只有7位,所以,0xxxxxxx就足矣。但是0800開始,有效位至少為8位,我們得增加一個字節,按照UTF-8的規定,2字節的表示方式為110XXXXX 10XXXXXX,我們的編碼位為11位(X的個數),所以,我們最多可以表示UNICODE編碼位11位的字符,也就是07FF。07FF過了就是0800,有效位至少為12位,我們得用3字節來表示,按照UTF-8的規定,1110XXXX 10XXXXXX 10XXXXXX,最大編碼位為16位,也就是FFFF,最后一行我就不再解釋了。
            通過上面這個過程我們了解了,UNICODE轉UTF-8的過程,當然,逆過來就是UTF-8轉換成UNICODE。
            我們通過一個例子來演示上面的過程。漢字“楊”,UNICODE的編碼位0x6768,二進制形式為0110011101101000,根據上面的圖,我們知道它屬于第三行,因此,它應該放入1110XXXX 10XXXXXX 10XXXXXX的模板中,結果是11100110 10011101 10101000,十六進制表示為E69DA8。
            另外設計編碼問題,我們繞不開另一個問題,就是大端小端的問題,不過這個問題,網上資料很多,也很好實踐,這里我就不多啰嗦了。
            posted on 2012-09-23 22:56 梨樹陽光 閱讀(1809) 評論(1)  編輯 收藏 引用 所屬分類: C++
            色综合久久88色综合天天 | 久久中文字幕无码专区| 久久偷看各类wc女厕嘘嘘| 热久久国产精品| 久久天天躁狠狠躁夜夜2020一| 婷婷综合久久中文字幕蜜桃三电影| 国产精品久久毛片完整版| 精品欧美一区二区三区久久久 | 国产99久久精品一区二区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产精品久久久久久久久鸭 | 久久天天躁狠狠躁夜夜2020| 日本精品久久久中文字幕| 久久影院午夜理论片无码| 影音先锋女人AV鲁色资源网久久| 久久亚洲春色中文字幕久久久 | 久久99热精品| 久久妇女高潮几次MBA| 狠狠人妻久久久久久综合蜜桃| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 成人国内精品久久久久一区| 99久久久久| 国产精品女同久久久久电影院| 久久影院亚洲一区| 久久九九久精品国产免费直播| 99久久精品毛片免费播放| 色88久久久久高潮综合影院| 久久久高清免费视频| 亚洲国产高清精品线久久 | 中文国产成人精品久久亚洲精品AⅤ无码精品| 久久精品卫校国产小美女| 久久精品国产精品亜洲毛片| 91视频国产91久久久| 日韩乱码人妻无码中文字幕久久 | 少妇精品久久久一区二区三区| 久久A级毛片免费观看| 美女久久久久久| 青青草国产97免久久费观看| 久久久久亚洲AV成人网人人网站| 久久人人爽人人爽人人片AV东京热| 欧美亚洲国产精品久久蜜芽|