青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

AscII,Unicode,utf-8 utf-16,utf-32,BOM 的解說(shuō)(三)

基本知識(shí)

介紹Unicode之前,首先要講解一些基礎(chǔ)知識(shí)。雖然跟Unicode沒(méi)有直接的關(guān)系,但想弄明白Unicode,沒(méi)這些還真不行。

字節(jié)和字符的區(qū)別

咦,字節(jié)和字符能有什么區(qū)別啊?不都是一樣的嗎?完全正確,但只是在古老的DOS時(shí)代。當(dāng)Unicode出現(xiàn)后,字節(jié)和字符就不一樣了。

字節(jié)(octet)是一個(gè)八位的存儲(chǔ)單元,取值范圍一定是0~255。而字符(character,或者word)為語(yǔ)言意義上的符號(hào),范圍就不一定了。例如在UCS-2中定義的字符范圍為0~65535,它的一個(gè)字符占用兩個(gè)字節(jié)。

Big Endian和Little Endian

上面提到了一個(gè)字符可能占用多個(gè)字節(jié),那么這多個(gè)字節(jié)在計(jì)算機(jī)中如何存儲(chǔ)呢?比如字符0xabcd,它的存儲(chǔ)格式到底是 AB CD,還是 CD AB 呢?

實(shí)際上兩者都有可能,并分別有不同的名字。如果存儲(chǔ)為 AB CD,則稱為Big Endian;如果存儲(chǔ)為 CD AB,則稱為L(zhǎng)ittle Endian。

具體來(lái)說(shuō),以下這種存儲(chǔ)格式為Big Endian,因?yàn)橹?0xabcd)的高位(0xab)存儲(chǔ)在前面:

地址
 值
 
0x00000000
 AB
 
0x00000001
 CD
 

相反,以下這種存儲(chǔ)格式為L(zhǎng)ittle Endian:

地址
 值
 
0x00000000
 CD
 
0x00000001
 AB
 

UCS-2和UCS-4

Unicode是為整合全世界的所有語(yǔ)言文字而誕生的。任何文字在Unicode中都對(duì)應(yīng)一個(gè)值,這個(gè)值稱為代碼點(diǎn)(code point)。代碼點(diǎn)的值通常寫(xiě)成 U+ABCD 的格式。而文字和代碼點(diǎn)之間的對(duì)應(yīng)關(guān)系就是UCS-2(Universal Character Set coded in 2 octets)。顧名思義,UCS-2是用兩個(gè)字節(jié)來(lái)表示代碼點(diǎn),其取值范圍為 U+0000~U+FFFF。

為了能表示更多的文字,人們又提出了UCS-4,即用四個(gè)字節(jié)表示代碼點(diǎn)。它的范圍為 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一樣的。

要注意,UCS-2和UCS-4只規(guī)定了代碼點(diǎn)和文字之間的對(duì)應(yīng)關(guān)系,并沒(méi)有規(guī)定代碼點(diǎn)在計(jì)算機(jī)中如何存儲(chǔ)。規(guī)定存儲(chǔ)方式的稱為UTF(Unicode Transformation Format),其中應(yīng)用較多的就是UTF-16和UTF-8了。

UTF-16和UTF-32

UTF-16

UTF-16由 RFC2781規(guī)定,它使用兩個(gè)字節(jié)來(lái)表示一個(gè)代碼點(diǎn)。

不難猜到,UTF-16是完全對(duì)應(yīng)于UCS-2的,即把UCS-2規(guī)定的代碼點(diǎn)通過(guò)Big Endian或Little Endian方式直接保存下來(lái)。UTF-16包括三種:UTF-16,UTF-16BE(Big Endian),UTF-16LE(Little Endian)。

UTF-16BE和UTF-16LE不難理解,而UTF-16就需要通過(guò)在文件開(kāi)頭以名為BOM(Byte Order Mark)的字符來(lái)表明文件是Big Endian還是Little Endian。BOM為U+FEFF這個(gè)字符。

其實(shí)BOM是個(gè)小聰明的想法。由于UCS-2沒(méi)有定義U+FFFE,因此只要出現(xiàn) FF FE 或者 FE FF 這樣的字節(jié)序列,就可以認(rèn)為它是U+FEFF,并且可以判斷出是Big Endian還是Little Endian。

舉個(gè)例子。"ABC"這三個(gè)字符用各種方式編碼后的結(jié)果如下:

UTF-16BE
 00 41 00 42 00 43
 
UTF-16LE
 41 00 42 00 43 00
 
UTF-16(Big Endian)
 FE FF 00 41 00 42 00 43
 
UTF-16(Little Endian)
 FF FE 41 00 42 00 43 00
 
UTF-16(不帶BOM)
 00 41 00 42 00 43
 

Windows平臺(tái)下默認(rèn)的Unicode編碼為L(zhǎng)ittle Endian的UTF-16(即上述的 FF FE 41 00 42 00 43 00)。你可以打開(kāi)記事本,寫(xiě)上ABC,然后保存,再用二進(jìn)制編輯器看看它的編碼結(jié)果

 

另外,UTF-16還能表示一部分的UCS-4代碼點(diǎn)——U+10000~U+10FFFF。表示算法比較復(fù)雜,簡(jiǎn)單說(shuō)明如下:

從代碼點(diǎn)U中減去0x10000,得到U'。這樣U+10000~U+10FFFF就變成了 0x00000~0xFFFFF。
用20位二進(jìn)制數(shù)表示U'。 U'=yyyyyyyyyyxxxxxxxxxx
將前10位和后10位用W1和W2表示,W1=110110yyyyyyyyyy,W2=110111xxxxxxxxxx,則 W1 = D800~DBFF,W2 = DC00~DFFF。
例如,U+12345表示為 D8 08 DF 45(UTF-16BE),或者08 D8 45 DF(UTF-16LE)。

但是由于這種算法的存在,造成UCS-2中的 U+D800~U+DFFF 變成了無(wú)定義的字符。

UTF-32

UTF-32用四個(gè)字節(jié)表示代碼點(diǎn),這樣就可以完全表示UCS-4的所有代碼點(diǎn),而無(wú)需像UTF-16那樣使用復(fù)雜的算法。與UTF-16類似,UTF-32也包括UTF-32、UTF-32BE、UTF-32LE三種編碼,UTF-32也同樣需要BOM字符。僅用'ABC'舉例:

UTF-32BE
 00 00 00 41 00 00 00 42 00 00 00 43
 
UTF-32LE
 41 00 00 00 42 00 00 00 43 00 00 00
 
UTF-32(Big Endian)
 00 00 FE FF 00 00 00 41 00 00 00 42 00 00 00 43
 
UTF-32(Little Endian)
 FF FE 00 00 41 00 00 00 42 00 00 00 43 00 00 00
 
UTF-32(不帶BOM)
 00 00 00 41 00 00 00 42 00 00 00 43
 

UTF-8

UTF-16和UTF-32的一個(gè)缺點(diǎn)就是它們固定使用兩個(gè)或四個(gè)字節(jié),這樣在表示純ASCII文件時(shí)會(huì)有很多00字節(jié),造成浪費(fèi)。而RFC3629定義的UTF-8則解決了這個(gè)問(wèn)題。

UTF-8用1~4個(gè)字節(jié)來(lái)表示代碼點(diǎn)。表示方式如下:

UCS-2 (UCS-4)
 位序列
 第一字節(jié)
 第二字節(jié)
 第三字節(jié)
 第四字節(jié)
 
U+0000 .. U+007F
 00000000-0xxxxxxx
 0xxxxxxx
  
  
  
 
U+0080 .. U+07FF
 00000xxx-xxyyyyyy
 110xxxxx
 10yyyyyy
  
  
 
U+0800 .. U+FFFF
 xxxxyyyy-yyzzzzzz
 1110xxxx
 10yyyyyy
 10zzzzzz
  
 
U+10000..U+1FFFFF
 00000000-000wwwxx-

xxxxyyyy-yyzzzzzzz
 11110www
 10xxxxxx
 10yyyyyy
 10zzzzzz
 

可見(jiàn),ASCII字符(U+0000~U+007F)部分完全使用一個(gè)字節(jié),避免了存儲(chǔ)空間的浪費(fèi)。而且UTF-8不再需要BOM字節(jié)。

另外,從上表中可以看出,單字節(jié)編碼的第一字節(jié)為[00-7F],雙字節(jié)編碼的第一字節(jié)為[C2-DF],三字節(jié)編碼的第一字節(jié)為[E0-EF]。這樣只要看到第一個(gè)字節(jié)的范圍就可以知道編碼的字節(jié)數(shù)。這樣也可以大大簡(jiǎn)化算法。

 

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/fan158/archive/2009/01/16/3796857.aspx

posted on 2010-10-25 11:02 天下 閱讀(526) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(4)

隨筆分類(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一本高清dvd不卡在线观看| 一本色道久久综合亚洲精品不| 欧美电影免费| 久久精品72免费观看| 欧美日韩精品一区二区| 欧美成人tv| 国产一区二区无遮挡| 亚洲一区二区伦理| 亚洲午夜羞羞片| 欧美精品国产一区| 欧美黄色aaaa| 亚洲国语精品自产拍在线观看| 欧美一级午夜免费电影| 午夜欧美大片免费观看| 欧美视频在线一区| 日韩小视频在线观看| 亚洲精品裸体| 欧美jizzhd精品欧美巨大免费| 久色婷婷小香蕉久久| 国产一区二区欧美| 久久精品国产91精品亚洲| 性刺激综合网| 国产欧美日韩综合一区在线播放| 亚洲天堂av图片| 亚洲欧美综合| 国产嫩草影院久久久久| 亚洲自拍偷拍色片视频| 欧美一区二区三区视频在线| 国产精品久久7| 午夜老司机精品| 久久精品免费电影| 激情亚洲成人| 老司机亚洲精品| 亚洲国产美国国产综合一区二区| 亚洲国产成人精品久久| 蜜乳av另类精品一区二区| 欧美国产精品久久| 99re6这里只有精品| 欧美久久久久中文字幕| 亚洲美女福利视频网站| 亚洲伊人网站| 国产日韩欧美视频在线| 久久久欧美精品sm网站| 亚洲国产一区二区三区在线播| 一区二区不卡在线视频 午夜欧美不卡在 | 最新日韩欧美| 欧美日韩高清在线观看| 亚洲欧美日韩一区二区三区在线观看| 久久国产日本精品| 伊人久久成人| 欧美日韩ab| 亚洲欧美视频| 欧美成人69| 亚洲在线视频免费观看| 国产亚洲精品aa| 欧美大片国产精品| 亚洲欧美日本国产有色| 美女日韩在线中文字幕| 亚洲图中文字幕| 国模套图日韩精品一区二区| 男人天堂欧美日韩| 亚洲欧美一区二区原创| 亚洲激情视频网站| 久久不射网站| 最新国产拍偷乱拍精品| 国产精品久久久久久久一区探花 | 亚洲欧美日韩在线不卡| 欧美成人一区二免费视频软件| 亚洲专区一区二区三区| 精品1区2区| 国产精品久久久久国产精品日日 | 亚洲国产专区校园欧美| 欧美小视频在线| 免费视频一区二区三区在线观看| 亚洲午夜久久久久久久久电影院| 欧美大片在线看免费观看| 亚洲欧美日韩直播| 日韩一区二区久久| 亚洲高清中文字幕| 国产欧美日韩不卡| 欧美视频在线观看免费| 免费观看国产成人| 欧美中文在线字幕| 亚洲一本视频| 日韩午夜激情电影| 亚洲国产成人精品女人久久久 | 午夜精品视频网站| 99亚洲视频| 亚洲黄页一区| 欧美成人黄色小视频| 久久国产日韩欧美| 亚洲欧美激情诱惑| 这里只有精品视频| 日韩视频在线一区二区| 亚洲电影在线观看| 国产一区二区三区丝袜| 国产欧美成人| 国产精品自拍视频| 国产精品国产三级国产专播品爱网 | 中文在线资源观看网站视频免费不卡 | 欧美~级网站不卡| 久久午夜视频| 久久噜噜噜精品国产亚洲综合| 亚洲一级网站| 亚洲女性裸体视频| 亚洲一区二区精品| 亚洲男人的天堂在线aⅴ视频| 亚洲社区在线观看| 一区二区三区国产在线观看| 99热免费精品| 99精品久久久| 亚洲天堂成人| 亚洲午夜激情网页| 亚洲综合成人婷婷小说| 亚洲欧美在线另类| 久久精品导航| 久久一区视频| 亚洲第一在线视频| 亚洲精品视频在线| 中文精品在线| 欧美一级黄色网| 久久这里有精品视频| 欧美大片在线看免费观看| 欧美激情区在线播放| 欧美无砖砖区免费| 国产欧美综合一区二区三区| 国产主播精品| 91久久精品国产91久久性色tv| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 欧美日韩精品免费观看视一区二区| 欧美日韩精品| 国产精品五月天| 加勒比av一区二区| 日韩午夜三级在线| 性刺激综合网| 欧美激情成人在线| 一区二区三区国产精华| 香蕉国产精品偷在线观看不卡| 久久久精品一品道一区| 欧美黄色一区| 国产欧美一区二区精品婷婷 | 在线中文字幕日韩| 久久精品91| 亚洲日本国产| 久久av在线看| 欧美日韩一区二区在线视频| 国产伦精品一区二区三区| 亚洲国产精品第一区二区| 亚洲在线观看免费| 欧美成人xxx| 亚洲欧美一区二区三区在线| 久久综合99re88久久爱| 国产精品免费观看视频| 亚洲成人在线| 欧美一区二区黄色| 亚洲国内欧美| 久久精品在线视频| 国产精品激情av在线播放| 亚洲第一在线| 久久精品91久久香蕉加勒比 | 久久久人成影片一区二区三区 | 欧美激情一区二区三区高清视频| 国产欧美日韩视频一区二区| 99av国产精品欲麻豆| 美国三级日本三级久久99| 中日韩美女免费视频网站在线观看| 另类av一区二区| 国产日韩一区二区三区在线| 一区二区三区视频观看| 欧美成人中文| 欧美主播一区二区三区| 国产精品久久久久久久久动漫| 亚洲精品日韩在线| 蜜桃av一区二区| 久久国产精品72免费观看| 国产精品电影网站| 中国成人在线视频| 亚洲高清免费| 久久躁狠狠躁夜夜爽| 国产一区清纯| 欧美在线日韩精品| 亚洲午夜精品久久久久久浪潮| 欧美日韩国产精品专区| 亚洲美女av网站| 欧美激情精品| 另类专区欧美制服同性| 激情欧美亚洲| 你懂的视频一区二区| 久久久综合精品| 伊人久久噜噜噜躁狠狠躁 | 午夜精品国产精品大乳美女| 亚洲乱码国产乱码精品精可以看| 欧美成人性网| 日韩亚洲视频| 99精品视频免费全部在线| 欧美日韩亚洲高清一区二区| 99视频有精品| 亚洲一区3d动漫同人无遮挡| 欧美午夜电影网| 午夜天堂精品久久久久|