• <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
            如果你對(duì)能很快回答出unicode和utf-8的關(guān)系,你可以直接跳過(guò)這篇文章。下面我來(lái)說(shuō)說(shuō)兩者的關(guān)系和轉(zhuǎn)換。(本文使用符號(hào)2字代表所有的漢字,英文,數(shù)字等)
            首先明確一點(diǎn),UTF-8是UNICODE一種實(shí)現(xiàn)方式。
            UNICODE:代表一種符號(hào)集合,它規(guī)定了一種符合的二進(jìn)制表示,沒(méi)有指明存儲(chǔ)方式。(http://www.unicode.org/)
            UTF-8:實(shí)現(xiàn)了UNICODE,使用多字節(jié)的存儲(chǔ)方式。
            我們先來(lái)考慮幾個(gè)問(wèn)題。
            第一,如果使用單字節(jié)表示符號(hào),很明顯,完全不夠用
            第二,如果使用多字節(jié)表示符號(hào),那么,機(jī)器在讀取的時(shí)候,它怎么知道3個(gè)字節(jié)表示一個(gè)符號(hào),還是表示3個(gè)符號(hào)
            第三,如果使用2個(gè)字節(jié)表示一個(gè)符號(hào),首先,最多能表示65535個(gè)字符還是會(huì)不夠用,就算夠用,比如ASCII碼這類(lèi)僅需1個(gè)字節(jié)就可以表示的符號(hào),用2個(gè)字節(jié)表示,浪費(fèi)空間了。
            因此,UTF-8孕育而生。
            首先UTF-8使用變長(zhǎng)表示符號(hào),簡(jiǎn)單的說(shuō),有的時(shí)候用1個(gè)字節(jié)表示符號(hào),有的時(shí)候用2個(gè)字節(jié)表示符號(hào),這樣解決了浪費(fèi)空間的問(wèn)題。那么,如何解決第二個(gè)問(wèn)題的呢,我們得了解下UFT-8的編碼規(guī)則。
            1.對(duì)于單字節(jié)的符號(hào),字節(jié)第一個(gè)為0,后面7為為這個(gè)符號(hào)的unicode碼
            2.對(duì)于N字節(jié)的符號(hào)(N>1),第一個(gè)字節(jié)前N位為1,第N+1位為0,后面字節(jié)的前兩位設(shè)為10,剩下可編碼的位,為該符號(hào)的UNICODE編碼。
            這里我從網(wǎng)上找了一副圖
                           Unicode符號(hào)范圍 | UTF-8編碼方式
                                    (十六進(jìn)制) | (二進(jìn)制)
            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編碼,對(duì)應(yīng)的UTF-8的編碼方式為0XXXXXXX(X表示可編碼位,不足的補(bǔ)0)。
            第二行表示00000080到000007FF的UNICODE編碼,對(duì)應(yīng)的UTF-8的編碼方式為110XXXXX 10XXXXXX。以此類(lèi)推
            那么,問(wèn)題是,這個(gè)范圍是怎么定的?
            很簡(jiǎn)單,我們還是從第一行說(shuō)起。007F,實(shí)際有效位只有7位,所以,0xxxxxxx就足矣。但是0800開(kāi)始,有效位至少為8位,我們得增加一個(gè)字節(jié),按照UTF-8的規(guī)定,2字節(jié)的表示方式為110XXXXX 10XXXXXX,我們的編碼位為11位(X的個(gè)數(shù)),所以,我們最多可以表示UNICODE編碼位11位的字符,也就是07FF。07FF過(guò)了就是0800,有效位至少為12位,我們得用3字節(jié)來(lái)表示,按照UTF-8的規(guī)定,1110XXXX 10XXXXXX 10XXXXXX,最大編碼位為16位,也就是FFFF,最后一行我就不再解釋了。
            通過(guò)上面這個(gè)過(guò)程我們了解了,UNICODE轉(zhuǎn)UTF-8的過(guò)程,當(dāng)然,逆過(guò)來(lái)就是UTF-8轉(zhuǎn)換成UNICODE。
            我們通過(guò)一個(gè)例子來(lái)演示上面的過(guò)程。漢字“楊”,UNICODE的編碼位0x6768,二進(jìn)制形式為0110011101101000,根據(jù)上面的圖,我們知道它屬于第三行,因此,它應(yīng)該放入1110XXXX 10XXXXXX 10XXXXXX的模板中,結(jié)果是11100110 10011101 10101000,十六進(jìn)制表示為E69DA8。
            另外設(shè)計(jì)編碼問(wèn)題,我們繞不開(kāi)另一個(gè)問(wèn)題,就是大端小端的問(wèn)題,不過(guò)這個(gè)問(wèn)題,網(wǎng)上資料很多,也很好實(shí)踐,這里我就不多啰嗦了。
            posted on 2012-09-23 22:56 梨樹(shù)陽(yáng)光 閱讀(1801) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): C++
            久久精品国产亚洲av麻豆图片| 久久www免费人成精品香蕉| 欧美日韩成人精品久久久免费看| 久久综合九色综合欧美就去吻| 性做久久久久久久久老女人| 久久久精品国产免大香伊 | 国产精品99久久久久久猫咪 | 天天躁日日躁狠狠久久| 精品国产乱码久久久久久1区2区| 777久久精品一区二区三区无码 | 波多野结衣AV无码久久一区| 91精品国产91久久综合| 久久国产成人午夜aⅴ影院| 久久只有这里有精品4| 99精品国产在热久久无毒不卡| 久久精品国产一区| 久久亚洲精品人成综合网| 99久久综合国产精品二区| 亚洲AV日韩精品久久久久久| 国产亚洲美女精品久久久| 久久久久亚洲AV无码麻豆| 女人高潮久久久叫人喷水| 国产精品美女久久久网AV| 看久久久久久a级毛片| 久久国产亚洲精品| 人妻中文久久久久| 99久久国产综合精品五月天喷水 | 综合久久精品色| 久久精品国产福利国产琪琪| 国产亚洲婷婷香蕉久久精品 | 伊人久久免费视频| 久久精品国产亚洲av高清漫画| 97视频久久久| 色播久久人人爽人人爽人人片AV | 久久久久亚洲精品无码蜜桃 | 国内精品久久久久久久97牛牛| 777午夜精品久久av蜜臀| 中文字幕无码免费久久| 久久精品成人欧美大片| 日韩精品无码久久久久久| 日韩乱码人妻无码中文字幕久久 |