Unicode、UTF-8與GB2312等編碼之間是如何轉(zhuǎn)換的_第1頁
Unicode、UTF-8與GB2312等編碼之間是如何轉(zhuǎn)換的_第2頁
Unicode、UTF-8與GB2312等編碼之間是如何轉(zhuǎn)換的_第3頁
Unicode、UTF-8與GB2312等編碼之間是如何轉(zhuǎn)換的_第4頁
Unicode、UTF-8與GB2312等編碼之間是如何轉(zhuǎn)換的_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、字符編碼知識:Unicode、UTF-8、ASCII、GB2312等編碼之間是如何轉(zhuǎn)換的?(.字符編碼是計算機(jī)技術(shù)的基石,想要熟練使用計算機(jī),就必須懂得字符編碼的知識。不注意的人可能對這個不在意,但這些名詞有時候?qū)嵲谧屓嗣曰?,對想學(xué)習(xí)計算機(jī)知識的人來說,搞懂它也十分重要,我也是在學(xué)習(xí)中慢慢了解了一些這方面的知識。1. AASCIII碼 在計計算機(jī)內(nèi)內(nèi)部,所所有的信信息最終終都表示示為一個個二進(jìn)制制的字符符串。每每一個二二進(jìn)制位位(biit)有有0和11兩種狀狀態(tài),因因此八個個二進(jìn)制制位就可可以組合合出2556種狀狀態(tài),這這被稱為為一個字字節(jié)(bbytee)。也也就是說說,一個個字節(jié)一一共可以以

2、用來表表示2556種不不同的狀狀態(tài),每每一個狀狀態(tài)對應(yīng)應(yīng)一個符符號,就就是2556個符符號,從從000000000到11111111111。上個世紀(jì)紀(jì)60年年代,美美國制定定了一套套字符編編碼,對對英語字字符與二二進(jìn)制位位之間的的關(guān)系,做了統(tǒng)統(tǒng)一規(guī)定定。這被被稱為AASCIII碼,一直沿沿用至今今。ASCIII碼一一共規(guī)定定了1228個字字符的編編碼,比比如空格格“SPPACEE”是332(十十進(jìn)制的的32,用二進(jìn)進(jìn)制表示示就是00010000000),大寫的的字母AA是655(二進(jìn)進(jìn)制01100000011)。這這1288個符號號(包括括32個個不能打打印出來來的控制制符號),只占占用了一一

3、個字節(jié)節(jié)的后面面7位,最前面面的1位位統(tǒng)一規(guī)規(guī)定為00。下面面是截圖圖:具體體的可以以到這個個網(wǎng)頁上上去查下下:2、非AASCIII編碼碼英語用1128個個符號編編碼就夠夠了,但但是用來來表示其其他語言言,1228個符符號是不不夠的。比如,在法語語中,字字母上方方有注音音符號,它就無無法用AASCIII碼表表示。于于是,一一些歐洲洲國家就就決定,利用字字節(jié)中閑閑置的最最高位編編入新的的符號。比如,法語中中的的的編碼為為1300(二進(jìn)進(jìn)制10000000100)。這這樣一來來,這些些歐洲國國家使用用的編碼碼體系,可以表表示最多多2566個符號號。但是,這這里又出出現(xiàn)了新新的問題題。不同同的國家家

4、有不同同的字母母,因此此,哪怕怕它們都都使用2256個個符號的的編碼方方式,代代表的字字母卻不不一樣。比如,1300在法語語編碼中中代表了了,在在希伯來來語編碼碼中卻代代表了字字母Giimell (),在在俄語編編碼中又又會代表表另一個個符號。但是不不管怎樣樣,所有有這些編編碼方式式中,001227表示示的符號號是一樣樣的,不不一樣的的只是11282555的這一一段。至于亞洲洲國家的的文字,使用的的符號就就更多了了,漢字字就多達(dá)達(dá)10萬萬左右。一個字字節(jié)只能能表示2256種種符號,肯定是是不夠的的,就必必須使用用多個字字節(jié)表達(dá)達(dá)一個符符號。比比如,簡簡體中文文常見的的編碼方方式是GGB2331

5、2,使用兩兩個字節(jié)節(jié)表示一一個漢字字,所以以理論上上最多可可以表示示2566x2556=6655336個符符號。3.Unnicoode正如上一一節(jié)所說說,世界界上存在在著多種種編碼方方式,同同一個二二進(jìn)制數(shù)數(shù)字可以以被解釋釋成不同同的符號號。因此此,要想想打開一一個文本本文件,就必須須知道它它的編碼碼方式,否則用用錯誤的的編碼方方式解讀讀,就會會出現(xiàn)亂亂碼。為為什么電電子郵件件常常出出現(xiàn)亂碼碼?就是是因為發(fā)發(fā)信人和和收信人人使用的的編碼方方式不一一樣。解解釋:同同一個文文本文件件,假設(shè)設(shè)內(nèi)容是是用英語語寫的,在英語語編碼的的情況下下,每個個字符會會和一個個二進(jìn)制制數(shù)對應(yīng)應(yīng)(如000100100

6、00類似似),然然后存到到計算機(jī)機(jī)中,這這時把這這個英語語文件發(fā)發(fā)給一個個俄語國國家的用用戶,計計算機(jī)傳傳輸?shù)氖鞘嵌M(jìn)制制流,即即01001之類類的數(shù)據(jù)據(jù),到了了俄語用用戶這方方,需要要有它的的俄語編編碼方式式進(jìn)行解解碼,把把每個二二進(jìn)制流流轉(zhuǎn)為字字符顯示示,由于于俄語編編碼表中中對每串串二進(jìn)制制流數(shù)據(jù)據(jù)的解釋釋方式不不同,同同一個數(shù)數(shù)據(jù)如00010010000在英英語中可可能代表表A,而而在俄語語中則代代表B,這樣就就會產(chǎn)生生亂碼,這是我我個人的的理解。GB23312編編碼、日日文編碼碼等也是是非unnicoode編編碼,是是要通過過轉(zhuǎn)換表表(coodeppagee)轉(zhuǎn)換換成unnicood

7、e編編碼的,要不怎怎么顯示示出來呢呢?可以想象象,如果果有一種種編碼,將世界界上所有有的符號號都納入入其中。每一個個符號都都給予一一個獨(dú)一一無二的的編碼,那么亂亂碼問題題就會消消失。這這就是UUniccodee,就像像它的名名字都表表示的,這是一一種所有有符號的的編碼。Uniccodee當(dāng)然是是一個很很大的集集合,現(xiàn)現(xiàn)在的規(guī)規(guī)??梢砸匀菁{1100多多萬個符符號。每每個符號號的編碼碼都不一一樣,比比如,UU+06639表表示阿拉拉伯字母母Ainn,U+00441表示示英語的的大寫字字母A,U+44E255表示漢漢字“嚴(yán)嚴(yán)”。具具體的符符號對應(yīng)應(yīng)表,可可以查詢詢或者專專門的4. UUniccode

8、e的問題題需要注意意的是,Uniicodde只是是一個符符號集,只是一一種規(guī)范范、標(biāo)準(zhǔn)準(zhǔn),它只只規(guī)定了了符號的的二進(jìn)制制代碼,卻沒有有規(guī)定這這個二進(jìn)進(jìn)制代碼碼應(yīng)該如如何存儲儲在計算算機(jī)上。比如,漢漢字“嚴(yán)嚴(yán)”的uuniccodee是十六六進(jìn)制數(shù)數(shù)4E225,轉(zhuǎn)轉(zhuǎn)換成二二進(jìn)制數(shù)數(shù)足足有有15位位(10001111000010001001),也就是是說這個個符號的的表示至至少需要要2個字字節(jié)。表表示其他他更大的的符號,可能需需要3個個字節(jié)或或者4個個字節(jié),甚至更更多。這里就有有兩個嚴(yán)嚴(yán)重的問問題,第第一個問問題是,如何才才能區(qū)別別uniicodde和aasciii?計計算機(jī)怎怎么知道道三個字字節(jié)表

9、示示一個符符號,而而不是分分別表示示三個符符號呢?第二個個問題是是,我們們已經(jīng)知知道,英英文字母母只用一一個字節(jié)節(jié)表示就就夠了,如果uuniccodee統(tǒng)一規(guī)規(guī)定,每每個符號號用三個個或四個個字節(jié)表表示,那那么每個個英文字字母前都都必然有有二到三三個字節(jié)節(jié)是0,這對于于存儲來來說是極極大的浪浪費(fèi),文文本文件件的大小小會因此此大出二二三倍,這是無無法接受受的。它們造成成的結(jié)果果是:11)出現(xiàn)現(xiàn)了unnicoode的的多種存存儲方式式,也就就是說有有許多種種不同的的二進(jìn)制制格式,可以用用來表示示uniicodde。22)unnicoode在在很長一一段時間間內(nèi)無法法推廣,直到互互聯(lián)網(wǎng)的的出現(xiàn)。5.

10、UTTF-88互聯(lián)網(wǎng)的的普及,強(qiáng)烈要要求出現(xiàn)現(xiàn)一種統(tǒng)統(tǒng)一的編編碼方式式。UTTF-88就是在在互聯(lián)網(wǎng)網(wǎng)上使用用最廣的的一種uuniccodee的實現(xiàn)現(xiàn)方式。其他實實現(xiàn)方式式還包括括UTFF-166和UTTF-332,不不過在互互聯(lián)網(wǎng)上上基本不不用。重重復(fù)一遍遍,這里里的關(guān)系系是,UUTF-8是UUniccodee的實現(xiàn)現(xiàn)方式之之一,它它規(guī)定了了字符如如何在計計算機(jī)中中存儲、傳輸?shù)鹊?。UTF-8最大大的一個個特點(diǎn),就是它它是一種種變長的的編碼方方式。它它可以使使用14個字字節(jié)表示示一個符符號,根根據(jù)不同同的符號號而變化化字節(jié)長長度。UTF-8的編編碼規(guī)則則很簡單單,只有有二條:1)對于于單字節(jié)節(jié)

11、的符號號,字節(jié)節(jié)的第一一位設(shè)為為0,后后面7位位為這個個符號的的uniicodde碼。因此對對于英語語字母,UTFF-8編編碼和AASCIII碼是是相同的的。2)對于于n字節(jié)節(jié)的符號號(n1),第一個個字節(jié)的的前n位位都設(shè)為為1,第第n+11位設(shè)為為0,后后面字節(jié)節(jié)的前兩兩位一律律設(shè)為110。剩剩下的沒沒有提及及的二進(jìn)進(jìn)制位,全部為為這個符符號的uuniccodee碼。下表總結(jié)結(jié)了編碼碼規(guī)則,字母xx表示可可用編碼碼的位。Uniccodee符號范范圍 | UTTF-88編碼方方式(十十六進(jìn)制制) | (二二進(jìn)制)+00000 000000-00000 0077F | 0 xxxxxxxxxx0

12、0000 000800-00000 07FFF | 1110 xxxxxxx 100 xxxxxxxx00000 008000-00000 FFFFF | 11110 xxxxxx 100 xxxxxxxx 100 xxxxxxxx00001 000000-00010 FFFFF | 1111100 xxxx 100 xxxxxxxx 100 xxxxxxxx 100 xxxxxxxx下面,還還是以漢漢字“嚴(yán)嚴(yán)”為例例,演示示如何實實現(xiàn)UTTF-88編碼。已知“嚴(yán)嚴(yán)”的uuniccodee是4EE25(10001111000010001011),根根據(jù)上表表,可以以發(fā)現(xiàn)44E255處在第第三行

13、的的范圍內(nèi)內(nèi)(00000 08000-000000 FFFFF),因此此“嚴(yán)”的UTTF-88編碼需需要三個個字節(jié),即格式式是“111100 xxxxx 110 xxxxxxxx 110 xxxxxxxx”。然后,從“嚴(yán)嚴(yán)”的最最后一個個二進(jìn)制制位開始始,依次次從后向向前填入入格式中中的x,多出的的位補(bǔ)00。這樣樣就得到到了,“嚴(yán)”的的UTFF-8編編碼是“1111001100 1011110000 1011001101”,這是是保存在在計算機(jī)機(jī)中的實實際數(shù)據(jù)據(jù),轉(zhuǎn)換換成十六六進(jìn)制就就是E44B8AA5,轉(zhuǎn)轉(zhuǎn)成十六六進(jìn)制的的目的為為了便于于閱讀。6. UUniccodee與UTTF-88之間的

14、的轉(zhuǎn)換通過上一一節(jié)的例例子,可可以看到到“嚴(yán)”的Unnicoode碼碼是4EE25,UTFF-8編編碼是EE4B88A5,兩者是是不一樣樣的。它它們之間間的轉(zhuǎn)換換可以通通過程序序?qū)崿F(xiàn)。在Winndowws平臺臺下,有有一個最最簡單的的轉(zhuǎn)化方方法,就就是使用用內(nèi)置的的記事本本小程序序Nottepaad.eexe。打開文文件后,點(diǎn)擊“文件”菜單中中的“另另存為”命令,會跳出出一個對對話框,在最底底部有一一個“編編碼”的的下拉條條。里面有四四個選項項:ANNSI,Uniicodde,UUniccodee biig eendiian 和 UUTF-8。1)ANNSI是是默認(rèn)的的編碼方方式。對對于英文文

15、文件是是ASCCII編編碼,對對于簡體體中文文文件是GGB23312編編碼(只只針對WWinddowss簡體中中文版,如果是是繁體中中文版會會采用BBig55碼)。2)Unnicoode編編碼指的的是UCCS-22編碼方方式,即即直接用用兩個字字節(jié)存入入字符的的Uniicodde碼。這個選選項用的的litttlee enndiaan格式式。3)Unnicoode bigg enndiaan編碼碼與上一一個選項項相對應(yīng)應(yīng)。我在在下一節(jié)節(jié)會解釋釋litttlee enndiaan和bbig enddiann的涵義義。4)UTTF-88編碼,也就是是上一節(jié)節(jié)談到的的編碼方方法。選擇完”編碼方方式“后

16、后,點(diǎn)擊擊”保存存“按鈕鈕,文件件的編碼碼方式就就立刻轉(zhuǎn)轉(zhuǎn)換好了了。7. LLitttle enddiann和Biig eendiian上一節(jié)已已經(jīng)提到到,Unnicoode碼碼可以采采用UCCS-22格式直直接存儲儲。以漢漢字”嚴(yán)嚴(yán)“為例例,Unnicoode碼碼是4EE25,需要用用兩個字字節(jié)存儲儲,一個個字節(jié)是是4E,另一個個字節(jié)是是25。存儲的的時候,4E在在前,225在后后,就是是Bigg enndiaan方式式;255在前,4E在在后,就就是Liittlle eendiian方方式。那么很自自然的,就會出出現(xiàn)一個個問題:計算機(jī)機(jī)怎么知知道某一一個文件件到底采采用哪一一種方式式編碼?

17、Uniccodee規(guī)范中中定義,每一個個文件的的最前面面分別加加入一個個表示編編碼順序序的字符符,這個個字符的的名字叫叫做”零零寬度非非換行空空格“(ZERRO WWIDTTH NNO-BBREAAK SSPACCE),用FEEFF表表示。這這正好是是兩個字字節(jié),而而且FFF比FEE大1。如果一個個文本文文件的頭頭兩個字字節(jié)是FFE FFF,就就表示該該文件采采用大頭頭方式;如果頭頭兩個字字節(jié)是FFF FFE,就就表示該該文件采采用小頭頭方式。8. 實實例下面,舉舉一個實實例。打開”記記事本“程序NNoteepadd.exxe,新新建一個個文本文文件,內(nèi)內(nèi)容就是是一個”嚴(yán)“字字,依次次采用AA

18、NSII,Unnicoode,Uniicodde bbig enddiann 和 UTFF-8編編碼方式式保存。然后,用用文本編編輯軟件件的”十十六進(jìn)制制功能“,觀察察該文件件的內(nèi)部部編碼方方式。1)ANNSI:文件的的編碼就就是兩個個字節(jié)“D1 CF”,這正正是“嚴(yán)嚴(yán)”的GGB23312編編碼,這這也暗示示GB223122是采用用大頭方方式存儲儲的。2)Unnicoode:編碼是是四個字字節(jié)“FFF FFE 225 44E”,其中“FF FE”表明是是小頭方方式存儲儲,真正正的編碼碼是4EE25。3)Unnicoode bigg enndiaan:編編碼是四四個字節(jié)節(jié)“FEE FFF 4EE

19、 255”,其其中“FFE FFF”表表明是大大頭方式式存儲。4)UTTF-88:編碼碼是六個個字節(jié)“EF BB BF E4 B8 A5”,前三三個字節(jié)節(jié)“EFF BBB BFF”表示示這是UUTF-8編碼碼,后三三個“EE4B88A5”就是“嚴(yán)”的的具體編編碼,它它的存儲儲順序與與編碼順順序是一一致的。推薦這篇篇文章看看一下:9.解決決的問題題:一、如何何在中文文系統(tǒng)中中運(yùn)行非非Uniicodde編碼碼程序?有很多多意大利利文版(除英文文版)學(xué)學(xué)習(xí)軟件件、百科科全書等等軟件在在中文系系統(tǒng)上會會出現(xiàn)亂亂碼,解解決方法法: WWinddowssXP內(nèi)內(nèi)核是UUniccodee編碼,支持多多語種,

20、對于UUniccodee編碼的的應(yīng)用程程序會正正常顯示示原文(因為wwinddowss核心是是用unnicoode代代碼寫的的,所以以不存在在問題),但是是,很多多程序不不是用UUniccodee編碼寫寫的,這這時WiindoowsXXP系統(tǒng)統(tǒng)可以指指定以特特定的編編碼運(yùn)行行非Unnicoode編編碼程序序,中文文版WiindoowsXXP默認(rèn)認(rèn)的是“簡體中中文GBB23112”。你只需需在控制制面板區(qū)區(qū)域和語語言選項項-高級為為非Unnicoode程程序的語語言選擇擇“意大大利語”,即可可正確運(yùn)運(yùn)行意大大利文版版的游戲戲程序。分析:我理解解的流程程是這樣樣:程序序意大大利語編編碼(轉(zhuǎn)轉(zhuǎn)換表ccodeepagge)解釋成成uniicodde識別別的編碼碼(通過過指定的的轉(zhuǎn)換表表將非 Uniicodde 的的字符編編碼轉(zhuǎn)換換為同一一字符對對應(yīng)的系系統(tǒng)內(nèi)部部使用的的 Unnicoode 編碼)被系系統(tǒng)翻譯譯成意大大利文(因為每每個unnicoode編編碼對應(yīng)應(yīng)了相應(yīng)應(yīng)的意大大利文字字),便便可以正正常顯示示了。二、消除除網(wǎng)頁亂亂碼?網(wǎng)頁亂碼碼是瀏覽覽器對H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論