亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1639 | 回復: 0
打印 上一主題 下一主題

關于UTF8,UTF16,UTF32,UTF16-LE,UTF16-BE (ZZ) [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-01-27 17:12 |只看該作者 |倒序瀏覽
轉(zhuǎn)自:
http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/80ac6b4ed1b7cec1d0c86a3e.html

Unicode是Unicode.org制定的編碼標準,目前得到了絕大部分操作系統(tǒng)和編程語言的支持。Unicode.org官方對Unicode的定義是:Unicode provides a unique number for everycharacter?梢姡琔nicode所做的是為每個字符定義了一個相應的數(shù)字表示。比如,“a“的Unicode值是0x0061, “一”的Unicde值是0x4E00,這是最簡單的情況,每個字符用2個字節(jié)表示。
       Unicode.org定義了百萬個以上的字符,如果將所有的字符用統(tǒng)一的格式表示,需要的是4個字節(jié)!癮“的Unicode表示就會變成 0x00000061,而“一“的Unicode值是0x00004E00。實際上,這就是UTF32,Linux操作系統(tǒng)上所使用的Unicode方案。
       但是,仔細分析可以發(fā)現(xiàn),其實絕大部分字符只使用2個字節(jié)就可以表示了。英文的Unicode范圍是0x0000-0x007F,中文的Unicode范圍是0x4E00-0x9F**,真正需要擴展到4個字節(jié)來表示的字符少之又少,所以有些系統(tǒng)直接使用2個字節(jié)來表示Unicode。比如Windows 系統(tǒng)上,Unicode就是兩個字節(jié)的。對于那些需要4個字節(jié)才能表示的字符,使用一種代理的手法來擴展(其實就是在低兩個字節(jié)上做一個標記,表示這是一個代理,需要連接上隨后的兩個字節(jié),才能組成一個字符)。這樣的好處是大量的節(jié)約了存取空間,也提高了處理的速度。這種Unicode表示方法就是 UTF16。一般在Windows平臺上,提到Unicode,那就是指UTF16了。
      
       至于UTF16-LE和UTF16-BE,與計算機的CPU構(gòu)架有關。LE指Little Endian,而BE指BigEndian。關于這方面的信息,網(wǎng)上有很多相關的帖子。我們一般的X86系統(tǒng)都是LittleEndian的,可以認為 UTF16=UTF16-LE.
       由于對于歐洲和北美,實際上使用的編碼范圍在0x0000-0x00FF之間,只需要一個字符就可以表示所有的字符。即使是使用UTF16來作為內(nèi)存的存取方式,還是會帶來巨大的空間浪費,因此就有了UTF8的編碼方式。這是一種很靈活的編碼,對于只需要1個字節(jié)的字符,就使用一個字節(jié),對于中日韓等原本需要兩個字節(jié)才能表示的字符,則通過一個UTF16-UTF8的算法實現(xiàn)相互之間的轉(zhuǎn)換(一般需要3個字節(jié)才能表示),而對于需要4個字節(jié)才能表示的字符,UTF8可以擴展到6個字節(jié)每個字符。UTF8使用的算法很有意思,大致映射關系如下:
       UTF-32                                  UTF8
      0x00000000 - 0x0000007F       0xxxxxxx
      0x00000080 - 0x000007FF           110xxxxx 10xxxxxx
      0x00000800 - 0x0000FFFF       1110xxxx 10xxxxxx 10xxxxxx
      0x00010000 - 0x001FFFFF       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
      0x00200000 - 0x03FFFFFF       111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
      0x04000000 - 0x7FFFFFFF       1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
       可以發(fā)現(xiàn)這和IP的分址算法很是相像。
       由于UTF8可以方便的轉(zhuǎn)換為UTF16和UTF32(不需要碼表,轉(zhuǎn)換算法可以在Unicode.org上找到C代碼)。而且UTF8在每個操作系統(tǒng)平臺上的實現(xiàn)都是一樣的,也不存在跨平臺的問題,所以UTF8成為跨平臺的Unicode很好的解決方案。當然,對于中文來說,由于每個字符需要3個字節(jié)才能表示,還是有點浪費的。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u1/55468/showart_2162364.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP