posts - 82, comments - 269, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          UNICODE的一點(diǎn)理解

          Posted on 2006-11-12 18:17 itspy 閱讀(1765) 評(píng)論(3)  編輯  收藏 所屬分類: 其它技術(shù)
          看了好多UNICODE的標(biāo)準(zhǔn)了,經(jīng)常在不同的地方看到不一致的說法,現(xiàn)在把我的理解寫下來。

          請(qǐng)大家最好帶著批判的眼光來看,里面可能有很多錯(cuò)誤,不要誤了大家,下面列出了很多參考文獻(xiàn)。如果發(fā)現(xiàn)了錯(cuò)誤,請(qǐng)大家指出或討論。

          1)UNICODE定義的字符集,剛開始只準(zhǔn)備用16位,可是好像不夠用,因?yàn)?6位最多只能容納6萬多個(gè)字符,后來就擴(kuò)展到32位了(好像實(shí)際上只有31位,最高位不用,永遠(yuǎn)為0)

          2)UTF-8是UNICODE的一種編碼形式,由于Unicode開始只準(zhǔn)備用16位來表示所有字符,所以一般情況下UTF8編碼也只會(huì)出現(xiàn)1-3個(gè)字節(jié),但實(shí)際上它可以支持到6個(gè)字節(jié)(但是6個(gè)字節(jié)有一些保留位,真正有效的位也就剛好只有32,剛好容納UNICODE字符集。??后面附UTF-8的詳細(xì)編碼方式,可以看出為什么6個(gè)字節(jié),有效位只有32位。

          3)平常所說的UNICODE編碼指的是UTF-16,?它使用16位,或者是32位來表示一個(gè)字符。UTF-16與UTF-8類似,只是跨步使用了2個(gè)字節(jié),而不是UTF-8的一個(gè)字節(jié)了(也就是要么2個(gè)字節(jié),要么4個(gè)字節(jié),不可能出現(xiàn)1個(gè)或者3個(gè)字節(jié)的編碼)。當(dāng)然如果用UTF-16這種編碼方式,文件必需要以一定的方式在開頭申明使用了這種方式,如何申明就不說了,這方面的資料網(wǎng)上很多,并且非常一致。

          4)UTF-32就沒什么好說的了,網(wǎng)上資料寫的很明白,就是直接用一個(gè)32位來表示UNICODE。UTF-32與UTF-16一樣,他也要在文件的開頭以一定的方式來申明它使用了UTF-16編碼,要不然就不能正確解碼了。

          ??計(jì)算機(jī)編碼大全(強(qiáng)烈推薦)?http://www.cppblog.com/oosky/archive/2005/12/13/1723.aspx

          http://bbs.netton.cn/ShowPost.asp?ThreadID=1906

          http://iask.sina.com.cn/b/3798538.html

          http://www.matrix.org.cn/thread.shtml?topicId=34590&forumId=19

          http://www.ismayday.com/article.asp?id=61

          http://www.cppblog.com/liangbo/archive/2006/04/23/6103.html

          http://dev.csdn.net/article/35/35305.shtm

          http://support.uufriend.com/blog/tom/99220.htm

          http://spaces.msn.com/iamtin/Blog/cns!1pvp_euYfEkmt-djP-0RlwBw!302.entry

          http://news.onlinedown.net/info/13164-1.htm

          http://www.linuxfans.org/nuke/modules.php?name=News&file=article&op=view&sid=1749


          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?


          注:原來發(fā)表于http://bbs.xml.org.cn/dispbbs.asp?boardID=1&replyID=41780&ID=32741&skin=1.
          但由于一些原因,我上此站點(diǎn)有些慢,就轉(zhuǎn)放于此


          評(píng)論

          # re: UNICODE的一點(diǎn)理解  回復(fù)  更多評(píng)論   

          2006-11-12 21:23 by jiangsukid
          16個(gè)字節(jié),或者是32個(gè)字節(jié)來
          是16個(gè)bit, 2個(gè)字節(jié)?
          筆誤嗎?

          # re: UNICODE的一點(diǎn)理解  回復(fù)  更多評(píng)論   

          2006-11-12 22:12 by itspy
          @jiangsukid
          謝謝你的提醒,我寫錯(cuò)了.

          應(yīng)該是16位,或者是32位.我馬上去修改

          # re: UNICODE的一點(diǎn)理解  回復(fù)  更多評(píng)論   

          2006-11-14 12:33 by Dennis
          Unicode 3.0 版本, 實(shí)際上只需要 21 bits 就能表達(dá)所有字
          即使用 UTF-32 時(shí), 也只會(huì)用去其中 21 bits
          http://www.unicode.org/faq/utf_bom.html



          主站蜘蛛池模板: 垦利县| 金阳县| 固镇县| 陕西省| 大城县| 石景山区| 贞丰县| 定襄县| 开远市| 柘荣县| 长顺县| 沛县| 河池市| 保定市| 元谋县| 全州县| 逊克县| 常山县| 屯门区| 冷水江市| 大关县| 吉林省| 舟山市| 苍溪县| 安仁县| 新郑市| 灌云县| 湾仔区| 永城市| 元朗区| 乾安县| 新郑市| 桃源县| 弥渡县| 渭源县| 偏关县| 科技| 三门县| 龙海市| 海南省| 罗城|