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

posts - 297,  comments - 15,  trackbacks - 0

字符編碼是計算機技術(shù)的基石,想要熟練使用計算機,就必須懂得一點字符編碼的知識。

1. ASCII碼

我們知道,在計算機內(nèi)部,所有的信息最終都表示為一個二進制的字符串。每一個二進制位(bit)有0和1兩種狀態(tài),因此八個二進制位就可以組合出 256種狀態(tài),這被稱為一個字節(jié)(byte)。也就是說,一個字節(jié)一共可以用來表示256種不同的狀態(tài),每一個狀態(tài)對應(yīng)一個符號,就是256個符號,從 0000000到11111111。

上個世紀(jì)60年代,美國制定了一套字符編碼,對英語字符與二進制位之間的關(guān)系,做了統(tǒng)一規(guī)定。這被稱為ASCII碼,一直沿用至今。

ASCII碼一共規(guī)定了128個字符的編碼,比如空格“SPACE”是32(二進制00100000),大寫的字母A是65(二進制01000001)。這128個符號(包括32個不能打印出來的控制符號),只占用了一個字節(jié)的后面7位,最前面的1位統(tǒng)一規(guī)定為0。

2、非ASCII編碼

英語用128個符號編碼就夠了,但是用來表示其他語言,128個符號是不夠的。比如,在法語中,字母上方有注音符號,它就無法用ASCII碼表示。 于是,一些歐洲國家就決定,利用字節(jié)中閑置的最高位編入新的符號。比如,法語中的é的編碼為130(二進制10000010)。這樣一來,這些歐洲國家使 用的編碼體系,可以表示最多256個符號。

但是,這里又出現(xiàn)了新的問題。不同的國家有不同的字母,因此,哪怕它們都使用256個符號的編碼方式,代表的字母卻不一樣。比如,130在法語編碼 中代表了é,在希伯來語編碼中卻代表了字母Gimel (?),在俄語編碼中又會代表另一個符號。但是不管怎樣,所有這些編碼方式中,0—127表示的符號是一樣的,不一樣的只是128—255的這一段。

至于亞洲國家的文字,使用的符號就更多了,漢字就多達(dá)10萬左右。一個字節(jié)只能表示256種符號,肯定是不夠的,就必須使用多個字節(jié)表達(dá)一個符號。 比如,簡體中文常見的編碼方式是GB2312,使用兩個字節(jié)表示一個漢字,所以理論上最多可以表示256x256=65536個符號。

中文編碼的問題需要專文討論,這篇筆記不涉及。這里只指出,雖然都是用多個字節(jié)表示一個符號,但是GB類的漢字編碼與后文的Unicode和UTF-8是毫無關(guān)系的。

3.Unicode

正如上一節(jié)所說,世界上存在著多種編碼方式,同一個二進制數(shù)字可以被解釋成不同的符號。因此,要想打開一個文本文件,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現(xiàn)亂碼。為什么電子郵件常常出現(xiàn)亂碼?就是因為發(fā)信人和收信人使用的編碼方式不一樣。

可以想象,如果有一種編碼,將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,那么亂碼問題就會消失。這就是Unicode,就像它的名字都表示的,這是一種所有符號的編碼。

Unicode當(dāng)然是一個很大的集合,現(xiàn)在的規(guī)模可以容納100多萬個符號。每個符號的編碼都不一樣,比如,U+0639表示阿拉伯字母Ain,U+0041表示英語的大寫字母A,U+4E25表示漢字“嚴(yán)”。具體的符號對應(yīng)表,可以查詢unicode.org,或者專門的漢字對應(yīng)表。

4. Unicode的問題

需要注意的是,Unicode只是一個符號集,它只規(guī)定了符號的二進制代碼,卻沒有規(guī)定這個二進制代碼應(yīng)該如何存儲。

比如,漢字“嚴(yán)”的unicode是十六進制數(shù)4E25,轉(zhuǎn)換成二進制數(shù)足足有15位(100111000100101),也就是說這個符號的表示至少需要2個字節(jié)。表示其他更大的符號,可能需要3個字節(jié)或者4個字節(jié),甚至更多。

這里就有兩個嚴(yán)重的問題,第一個問題是,如何才能區(qū)別unicode和ascii?計算機怎么知道三個字節(jié)表示一個符號,而不是分別表示三個符號 呢?第二個問題是,我們已經(jīng)知道,英文字母只用一個字節(jié)表示就夠了,如果unicode統(tǒng)一規(guī)定,每個符號用三個或四個字節(jié)表示,那么每個英文字母前都必 然有二到三個字節(jié)是0,這對于存儲來說是極大的浪費,文本文件的大小會因此大出二三倍,這是無法接受的。

它們造成的結(jié)果是:1)出現(xiàn)了unicode的多種存儲方式,也就是說有許多種不同的二進制格式,可以用來表示unicode。2)unicode在很長一段時間內(nèi)無法推廣,直到互聯(lián)網(wǎng)的出現(xiàn)。

5.UTF-8

互聯(lián)網(wǎng)的普及,強烈要求出現(xiàn)一種統(tǒng)一的編碼方式。UTF-8就是在互聯(lián)網(wǎng)上使用最廣的一種unicode的實現(xiàn)方式。其他實現(xiàn)方式還包括UTF-16和UTF-32,不過在互聯(lián)網(wǎng)上基本不用。重復(fù)一遍,這里的關(guān)系是,UTF-8是Unicode的實現(xiàn)方式之一。

UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度。

UTF-8的編碼規(guī)則很簡單,只有二條:

1)對于單字節(jié)的符號,字節(jié)的第一位設(shè)為0,后面7位為這個符號的unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。

2)對于n字節(jié)的符號(n>1),第一個字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。

下表總結(jié)了編碼規(guī)則,字母x表示可用編碼的位。

Unicode符號范圍 | UTF-8編碼方式
(十六進制) | (二進制)
--------------------+---------------------------------------------
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

下面,還是以漢字“嚴(yán)”為例,演示如何實現(xiàn)UTF-8編碼。

已知“嚴(yán)”的unicode是4E25(100111000100101),根據(jù)上表,可以發(fā)現(xiàn)4E25處在第三行的范圍內(nèi)(0000 0800-0000 FFFF),因此“嚴(yán)”的UTF-8編碼需要三個字節(jié),即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,從“嚴(yán)”的最后一個二進制位開始,依次從后向前填入格式中的x,多出的位補0。這樣就得到了,“嚴(yán)”的UTF-8編碼是 “11100100 10111000 10100101”,轉(zhuǎn)換成十六進制就是E4B8A5。

6. Unicode與UTF-8之間的轉(zhuǎn)換

通過上一節(jié)的例子,可以看到“嚴(yán)”的Unicode碼是4E25,UTF-8編碼是E4B8A5,兩者是不一樣的。它們之間的轉(zhuǎn)換可以通過程序?qū)崿F(xiàn)。

在Windows平臺下,有一個最簡單的轉(zhuǎn)化方法,就是使用內(nèi)置的記事本小程序Notepad.exe。打開文件后,點擊“文件”菜單中的“另存為”命令,會跳出一個對話框,在最底部有一個“編碼”的下拉條。


里面有四個選項:ANSI,Unicode,Unicode big endian 和 UTF-8。

1)ANSI是默認(rèn)的編碼方式。對于英文文件是ASCII編碼,對于簡體中文文件是GB2312編碼(只針對Windows簡體中文版,如果是繁體中文版會采用Big5碼)。

2)Unicode編碼指的是UCS-2編碼方式,即直接用兩個字節(jié)存入字符的Unicode碼。這個選項用的little endian格式。

3)Unicode big endian編碼與上一個選項相對應(yīng)。我在下一節(jié)會解釋little endian和big endian的涵義。

4)UTF-8編碼,也就是上一節(jié)談到的編碼方法。

選擇完”編碼方式“后,點擊”保存“按鈕,文件的編碼方式就立刻轉(zhuǎn)換好了。

7. Little endian和Big endian

上一節(jié)已經(jīng)提到,Unicode碼可以采用UCS-2格式直接存儲。以漢字”嚴(yán)“為例,Unicode碼是4E25,需要用兩個字節(jié)存儲,一個字節(jié) 是4E,另一個字節(jié)是25。存儲的時候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

這兩個古怪的名稱來自英國作家斯威夫特的《格列佛游記》。在該書中,小人國里爆發(fā)了內(nèi)戰(zhàn),戰(zhàn)爭起因是人們爭論,吃雞蛋時究竟是從大頭(Big- Endian)敲開還是從小頭(Little-Endian)敲開。為了這件事情,前后爆發(fā)了六次戰(zhàn)爭,一個皇帝送了命,另一個皇帝丟了王位。

因此,第一個字節(jié)在前,就是”大頭方式“(Big endian),第二個字節(jié)在前就是”小頭方式“(Little endian)。

那么很自然的,就會出現(xiàn)一個問題:計算機怎么知道某一個文件到底采用哪一種方式編碼?

Unicode規(guī)范中定義,每一個文件的最前面分別加入一個表示編碼順序的字符,這個字符的名字叫做”零寬度非換行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。這正好是兩個字節(jié),而且FF比FE大1。

如果一個文本文件的頭兩個字節(jié)是FE FF,就表示該文件采用大頭方式;如果頭兩個字節(jié)是FF FE,就表示該文件采用小頭方式。

8. 實例

下面,舉一個實例。

打開”記事本“程序Notepad.exe,新建一個文本文件,內(nèi)容就是一個”嚴(yán)“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8編碼方式保存。

然后,用文本編輯軟件UltraEdit中的”十六進制功能“,觀察該文件的內(nèi)部編碼方式。

1)ANSI:文件的編碼就是兩個字節(jié)“D1 CF”,這正是“嚴(yán)”的GB2312編碼,這也暗示GB2312是采用大頭方式存儲的。

2)Unicode:編碼是四個字節(jié)“FF FE 25 4E”,其中“FF FE”表明是小頭方式存儲,真正的編碼是4E25。

3)Unicode big endian:編碼是四個字節(jié)“FE FF 4E 25”,其中“FE FF”表明是大頭方式存儲。

4)UTF-8:編碼是六個字節(jié)“EF BB BF E4 B8 A5”,前三個字節(jié)“EF BB BF”表示這是UTF-8編碼,后三個“E4B8A5”就是“嚴(yán)”的具體編碼,它的存儲順序與編碼順序是一致的。


from:
http://blog.chinaunix.net/u2/76292/showart_1272892.html
posted on 2009-12-13 12:50 chatler 閱讀(227) 評論(0)  編輯 收藏 引用 所屬分類: misce
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区激情小说| 伊人婷婷欧美激情| 亚洲欧洲99久久| 亚洲一区二区三区四区中文| 国产精品成人一区二区网站软件| 欧美色大人视频| 午夜精品一区二区三区电影天堂 | 免费在线成人| 99精品视频免费全部在线| 亚洲精品综合精品自拍| 国产精品三级视频| 裸体丰满少妇做受久久99精品| 久久精品在线播放| 99精品99| 久久激情一区| 一本色道久久加勒比精品| 亚洲欧美日韩国产| 在线日韩欧美| 久久这里有精品15一区二区三区| 免费成人av资源网| 午夜精品影院在线观看| 久久av红桃一区二区小说| 亚洲欧洲日产国产综合网| 亚洲午夜精品福利| 亚洲激情小视频| 亚洲尤物视频网| 亚洲黄色在线观看| 亚洲欧美日韩国产一区| 欧美在线亚洲一区| 一区二区三区四区国产| 久久精品系列| 校园激情久久| 欧美黄色精品| 美日韩精品免费| 国产精品久久久一本精品| 久久久人人人| 国产精品一区二区三区四区五区| 亚洲国产精品电影| 国产精品丝袜91| 亚洲人成在线观看一区二区| 国产一区亚洲| 亚洲欧美日韩精品一区二区| 日韩视频永久免费观看| 久久久精品一区| 欧美在线观看www| 国产精品v亚洲精品v日韩精品 | 国产精品老女人精品视频| 亚洲成色www8888| 一区二区三区在线观看国产| 亚洲小视频在线观看| 亚洲免费av片| 欧美成人按摩| 欧美激情第9页| 亚洲第一福利社区| 久久午夜羞羞影院免费观看| 香蕉久久一区二区不卡无毒影院| 欧美日韩一二区| 亚洲精品在线免费| 一本不卡影院| 欧美日产国产成人免费图片| 亚洲国产天堂网精品网站| 亚洲国产91精品在线观看| 久久人91精品久久久久久不卡| 久久精品成人欧美大片古装| 国产麻豆9l精品三级站| 亚洲免费视频网站| 欧美在线视频免费| 国外成人在线| 免费成人高清在线视频| 亚洲成人在线视频播放 | 日韩天天综合| 亚洲欧美日韩国产一区| 国产精品午夜av在线| 午夜免费在线观看精品视频| 久久久99国产精品免费| 精品91视频| 欧美电影在线观看| 亚洲精品久久7777| 亚洲伊人网站| 国产亚洲欧美一区二区三区| 久久福利影视| 亚洲国产视频a| 亚洲视频电影图片偷拍一区| 国产精品手机在线| 久久亚洲一区二区| 日韩视频精品| 久久久蜜桃一区二区人| 91久久综合亚洲鲁鲁五月天| 亚洲精品久久嫩草网站秘色| 在线亚洲精品| 国产亚洲欧美日韩一区二区| 久久综合久久综合久久综合| 亚洲黄色一区二区三区| 亚洲一区二区三区影院| 国产自产女人91一区在线观看| 久久美女性网| 一区二区三区黄色| 免费精品视频| 亚洲欧洲av一区二区| 伊人久久av导航| 欧美性大战久久久久| 欧美在线三级| 这里是久久伊人| 免费成人美女女| 午夜久久99| 日韩亚洲欧美在线观看| 国产一区二区三区久久| 欧美日韩国产成人在线观看| 欧美影院一区| 一本色道久久综合狠狠躁篇怎么玩 | 在线观看国产日韩| 国产精品色婷婷| 欧美另类在线播放| 久久天天狠狠| 欧美一区二区久久久| 亚洲最新色图| 亚洲黄色av一区| 免费在线观看一区二区| 欧美一区二区黄| 亚洲一区美女视频在线观看免费| 在线观看一区二区视频| 国产精品亚洲成人| 欧美网站大全在线观看| 欧美成人tv| 欧美成人官网二区| 久久久综合网站| 欧美一级淫片播放口| 亚洲一区二区三区高清| 日韩视频免费看| 亚洲三级观看| 欧美激情在线| 亚洲电影欧美电影有声小说| 久久在线观看视频| 久久裸体艺术| 狼人天天伊人久久| 美女精品在线观看| 久久漫画官网| 乱人伦精品视频在线观看| 久久久一区二区三区| 久久久久久成人| 久久综合九色综合网站| 久久亚洲影音av资源网| 麻豆精品视频在线| 欧美jizzhd精品欧美巨大免费| 久久手机免费观看| 模特精品在线| 欧美激情亚洲精品| 亚洲精品一区二区在线| 亚洲精品一区二区三区99| 亚洲精品在线免费观看视频| 亚洲美女中出| 亚洲一区视频| 欧美制服丝袜| 蜜桃av噜噜一区| 欧美精品在线观看播放| 欧美日韩在线高清| 国产美女精品一区二区三区| 国产亚洲精品久久久久久| 黄色成人av网站| 亚洲欧洲偷拍精品| 亚洲一二三区精品| 欧美在线视频日韩| 欧美黄色成人网| 一本久久综合| 欧美14一18处毛片| 亚洲卡通欧美制服中文| 亚洲色在线视频| 久久久久久尹人网香蕉| 欧美日本中文| 国产日韩欧美综合精品| 亚洲第一福利社区| 亚洲欧美日韩另类精品一区二区三区| 欧美淫片网站| 亚洲大片av| 亚洲欧美日本伦理| 免费亚洲一区| 国产免费观看久久黄| 亚洲激情女人| 欧美在线视频一区二区三区| 免费观看在线综合色| 中文一区二区| 免费成人av在线| 国产一区二区三区免费观看| 亚洲精品系列| 久久免费国产精品1| 亚洲精品久久久久久久久久久久久| 亚洲欧美日本视频在线观看| 欧美国产第一页| 国产综合色产在线精品| 亚洲视频导航| 亚洲国产三级网| 久久蜜桃精品| 国产亚洲欧美一区| 午夜在线观看欧美| 亚洲精品免费网站| 嫩草国产精品入口| 激情综合自拍| 久久久99免费视频| 亚洲欧美日韩另类精品一区二区三区| 欧美另类综合|