• <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>

            網絡服務器軟件開發/中間件開發,關注ACE/ICE/boost

            C++博客 首頁 新隨筆 聯系 聚合 管理
              152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks

            utf8的編碼算法
            作者:轉載    轉貼自:轉載    點擊數:827    文章錄入: zhaizl




                     
            例如字符"漢"的unicode是6C49,把這個unicode字符表示為一個大整數,然后轉變成多字節編碼110110001001001:
                     
            觀察這個整數的二進制碼序列(110,110001,001001)
                      從后往前取
                     
            如果這個二進制序列只有后7位(小于128,也就是ascii字符)則直接取后7位二進制數形成一個utf8字符。
                     
            上面的字符“漢”二進制序列大于7位,所以取后6位(1001001),加10形成一個utf8字節(10 001001 ,16進制89)。
                     
            剩下的二進制序列(110,110001)從后向前取6位,加10形成一個utf8字節(10 110001,16進制B1)。
                     
            剩下的二進制序列(110)從后向前取6位,由于不足6位,將這個數和1110000相或,得到字符11100110,16進制E6
                     
            最后,就得到了utf8編碼,16進制表示為E6B189


            解讀UTF8編碼
            2007-01-19 10:40

            在網絡中有很多地方都有采用UTF8編碼,由于要編寫與郵件服務端有關的程序,而郵件服務端有些地方用到了UTF8編碼,所以對它有了初步的認識!

            它其實和Unicode是同類,就是在編碼方式上不同!
            首先UTF8編碼后的大小是不一定,不像Unicode編碼后的大小是一樣的! 
            我們先來看Unicode的編碼:一個英文字母 “a” 和 一個漢字 “好”,編碼后都是占用的空間大小是一樣的,都是兩個字節!

            而UTF8編碼:一個英文字母“a” 和 一個漢字 “好”,編碼后占用的空間大小就不樣了,前者是一個字節,后者是三個字節!

            現在就讓我們來看看UTF8編碼的原理吧:
              因為一個字母還有一些鍵盤上的符號加起來只用二進制七位就可以表示出來,而一個字節就是八位,所以UTF8就用一個字節來表式字母和一些鍵盤上的符號。然而當我們拿到被編碼后的一個字節后怎么知道它的組成?它有可能是英文字母的一個字節,也有可能是漢字的三個字節中的一個字節!所以,UTF8是有標志位的!

              當要表示的內容是 7位 的時候就用一個字節:0*******  第一個0為標志位,剩下的空間正好可以表示ASCII 0-127 的內容。

              當要表示的內容在 8 到 11 位的時候就用兩個字節:110***** 10******  第一個字節的110和第二個字節的10為標志位。

              當要表示的內容在 12 到 16 位的時候就用三個字節:1110***** 10****** 10******    和上面一樣,第一個字節的1110和第二、三個字節的10都是標志位,剩下的空間正好可以表示漢字。

              以此類推:
            四個字節:11110**** 10****** 10****** 10****** 
              五個字節:111110*** 10****** 10****** 10****** 10****** 
              六個字節:1111110** 10****** 10****** 10****** 10****** 10****** 
              .............................................
             ..............................................

            明白了沒有?
            編碼的方法是從低位到高位

            現在就讓我們來看看實例吧!

            紅色為標志位
            其它著色為了顯示其,編碼后的位置 

            Unicode十六進制


            Unicode二進制


            UTF8二進制


            UTF8十六進制


            UTF8字節數


            B


            00001011


            00001010


            B


            1


            9D


            00010011101


            11000010 10011101 


            C2 9D


            2


            A89E


            10101000 10011110


            11101010 10100010 10011110


            EA A2 9E


            3

            posted on 2007-04-05 17:23 true 閱讀(666) 評論(0)  編輯 收藏 引用 所屬分類: 編碼知識
            亚洲色婷婷综合久久| 精品国产综合区久久久久久| 久久久久久久国产免费看| 久久久久国产一级毛片高清板| 亚洲精品99久久久久中文字幕| 久久精品国产亚洲AV久| 国产精品久久影院| 香蕉99久久国产综合精品宅男自 | 久久精品国产亚洲AV无码麻豆 | 久久久噜噜噜久久中文字幕色伊伊| 久久久久国产一级毛片高清板 | 久久久精品人妻无码专区不卡| 狠狠色丁香久久婷婷综合_中| av午夜福利一片免费看久久| 国产精品亚洲综合久久| 9191精品国产免费久久| 色欲av伊人久久大香线蕉影院| 久久精品亚洲男人的天堂| 精品久久久久久久久午夜福利| 亚洲国产成人久久综合野外 | 午夜精品久久影院蜜桃| 国内精品久久久久久久coent| 少妇久久久久久被弄高潮| 亚洲国产成人精品91久久久 | 精品一区二区久久| 新狼窝色AV性久久久久久| 久久亚洲2019中文字幕| 99久久国产综合精品网成人影院| 色综合久久综合中文综合网| 久久久久国产视频电影| 久久久久久无码国产精品中文字幕| 精品无码久久久久国产| 浪潮AV色综合久久天堂| 亚洲国产另类久久久精品小说 | 久久免费高清视频| 久久综合九色综合网站| 国产成人精品综合久久久| 精品久久久久久中文字幕大豆网| 久久久久久国产精品美女| 久久免费视频1| 久久狠狠爱亚洲综合影院|