Unicode、UTF-8、Big Endian、Little Endian、GBK、UCS-2
生活随笔
收集整理的這篇文章主要介紹了
Unicode、UTF-8、Big Endian、Little Endian、GBK、UCS-2
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Unicode、UTF-8、Big Endian、Little Endian、GBK、UCS-2
編碼字符集(Coded character set):是一組字符對應(yīng)的編碼(即數(shù)字),為字符集合中的每一個(gè)字符給予一個(gè)數(shù)字。例如最早的編碼字符集ASCII,和后來的unicode(持續(xù)更新中)。由于編碼字符集為每一個(gè)字符賦予一個(gè)數(shù)字,因此,字符可以認(rèn)為就是一個(gè)16位的數(shù)字,因此以下方式都可以給字符賦值: char c=‘中’ char c =0x4e2d char c=20013 字符編碼方案(Character-encoding schema):將字符編碼(數(shù)字)映射到一個(gè)字節(jié)數(shù)組的方案,因?yàn)樵诖疟P里,所有信息都是以字節(jié)的方式存儲的。因此16位字符必須轉(zhuǎn)換為一個(gè)字節(jié)數(shù)組才能夠存儲。例如UTF-8字符編碼方案,它可以將一個(gè)字符轉(zhuǎn)換為1、2、3或者4個(gè)字節(jié)。
一般認(rèn)為,編碼字符集和字符編碼方案合起來被稱之為字符集(Charset),這是一個(gè)術(shù)語,要和前面的字符集合(Character set)區(qū)分開。 ?
(十六進(jìn)制) | (二進(jìn)制)
--------------------+---------------------------------------------
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
Little-Endian就是低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。
Big-Endian就是高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。
Big Endian和Little Endian和芯片類型以及操作系統(tǒng)都有關(guān)系。
推薦這篇文章看一下:http://wiki.ubuntu.org.cn/index.php?title=Unicode&variant=zh-cn#.E8.B5.B7.E6.BA.90.E8.88.87.E7.99.BC.E5.B1.95 4.解決的問題:一、如何在中文系統(tǒng)中運(yùn)行非Unicode編碼程序?
有很多意大利文版(除英文版)學(xué)習(xí)軟件、百科全書等軟件在中文系統(tǒng)上會(huì)出現(xiàn)亂碼,解決方法:
WindowsXP內(nèi)核是Unicode編碼,支持多語種,對于Unicode編碼的應(yīng)用程序會(huì)正常顯示原文(因?yàn)閣indows核心是用unicode代碼寫的,所以不存在問題),但是,很多程序不是用Unicode編碼寫的,這時(shí)WindowsXP系統(tǒng)可以指定以特定的編碼運(yùn)行非Unicode編碼程序,中文版WindowsXP默認(rèn)的是“簡體中文GB2312”。你只需在控制面板--〉區(qū)域和語言選項(xiàng)--〉高級--〉為非Unicode程序的語言選擇“意大利語”,即可正確運(yùn)行意大利文版的游戲程序。分析:我理解的流程是這樣:程序------>意大利語編碼(轉(zhuǎn)換表codepage)------>解釋成unicode識別的編碼(通過指定的轉(zhuǎn)換表將非 Unicode 的字符編碼轉(zhuǎn)換為同一字符對應(yīng)的系統(tǒng)內(nèi)部使用的 Unicode 編碼)------>被系統(tǒng)翻譯成意大利文(因?yàn)槊總€(gè)unicode編碼對應(yīng)了相應(yīng)的意大利文字),便可以正常顯示了。二、消除網(wǎng)頁亂碼?網(wǎng)頁亂碼是瀏覽器對HTML網(wǎng)頁解釋時(shí)形成的,如果網(wǎng)頁制作時(shí)編碼為繁體big5,瀏覽器卻以編碼gb2312顯示該網(wǎng)頁,就會(huì)出現(xiàn)亂碼,因此只要你在瀏覽器中也以繁體big5顯示該網(wǎng)頁,就會(huì)消除亂碼。打個(gè)比方有些像字典,繁體字得用繁體字典來查看,簡體字得用簡體字典來查看,不然你看不懂。 【解決辦法】:在瀏覽器中選擇“編碼”菜單,事先為瀏覽器安裝多語言支持包(例如在安裝IE時(shí)要安裝多語言支持包),這樣當(dāng)瀏覽網(wǎng)頁出現(xiàn)亂碼時(shí),即可手工更改查看此網(wǎng)頁的編碼方式,在瀏覽器中選擇菜單欄下的“查看”/“編碼”/“自動(dòng)選擇”/簡體中文(GB2312),如為繁體中文則選擇“查看”/“編碼”/“自動(dòng)選擇”/繁體中文(BIG5),其他語言依此類推,便可消除網(wǎng)頁亂碼現(xiàn)象。 分析:因?yàn)榉斌wbig5編碼后的文件,每個(gè)文字對應(yīng)一個(gè)二進(jìn)制流(假設(shè)是1212對應(yīng)繁這個(gè)字),當(dāng)我們以編碼gb2312顯示該網(wǎng)頁時(shí),gb2312編碼會(huì)到表里去找1212(二進(jìn)制流不會(huì)變的)對應(yīng)誰,肯定不再是繁這個(gè)字了,當(dāng)然顯示的就不再是那個(gè)繁字了,也就會(huì)出現(xiàn)亂碼了。這樣理解簡單些,其實(shí)中間還要轉(zhuǎn)換成同一字符對應(yīng)的系統(tǒng)內(nèi)部使用的 Unicode 編碼,然后通過系統(tǒng)底層unicode編碼還原成相應(yīng)字符顯示出來。 原文地址:到底u(yù)tf-8和unicode是什么關(guān)系 - - ITeye技術(shù)網(wǎng)站
一、Unicode、UCS、GBK
1、開始計(jì)算機(jī)只在美國用。八位的字節(jié)一共可以組合出256(2的8次方)種不同的狀態(tài)。把這些0×20以下的字節(jié)狀態(tài)稱為”控制碼”。他們又把所有的空 格、標(biāo)點(diǎn)符號、數(shù)字、大小寫字母分別用連續(xù)的字節(jié)狀態(tài)表示,一直編到了第127號,這樣計(jì)算機(jī)就可以用不同字節(jié)來存儲英語的文字了。這個(gè)方案叫做 ANSI 的”Ascii”編碼(American Standard Code for Information Interchange,美國信息互換標(biāo)準(zhǔn)代碼)。 2、后來計(jì)算機(jī)流傳到更多西方國家,但是很多國家用的不是英文,他們的字母里有許多是ASCII里沒有的,為了可以在計(jì)算機(jī) 保存他們的文字,他們決定采用 127號之后的空位來表示這些新的字母、符號,還加入了很多畫表格時(shí)需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最后一個(gè)狀態(tài)255。從128 到255這一頁的字符集被稱”擴(kuò)展字符集“。 3、等中國人們得到計(jì)算機(jī)時(shí),已經(jīng)沒有可以利用的字節(jié)狀態(tài)來表示6000多個(gè)常用漢字。 ???? 我們不客氣 地把那些127號之后的奇異符號們直接取消掉, 規(guī)定:一個(gè)小于127的字符的意義與原來相同,但兩個(gè)大于127的字符連在一起時(shí),就表示一個(gè)漢字,前面的一個(gè)字節(jié)(他稱之為高字節(jié))從0xA1用到 0xF7,后面一個(gè)字節(jié)(低字節(jié))從0xA1到0xFE,這樣我們就可以組合出大約7000多個(gè)簡體漢字了。 ???? 在這些編碼里,我們還把數(shù)學(xué)符號、羅馬希臘的 字母、日文的假名們都編進(jìn)去了,連在 ASCII 里本來就有的數(shù)字、標(biāo)點(diǎn)、字母都統(tǒng)統(tǒng)重新編了兩個(gè)字節(jié)長的編碼,這就是常說的”全角”字符,而原來在127號以下的那些就叫”半角”字符了。 中國人民看到這樣很不錯(cuò),于是就把這種漢字方案叫做 “GB2312“。GB2312 是對 ASCII 的中文擴(kuò)展。 ????? 但是中國的漢字太多了,我們很快就就發(fā)現(xiàn)有許多人的人名沒有辦法在這里打出來,于是我們不得不繼續(xù)把 GB2312 沒有用到的碼位找出來老實(shí)不客氣地用上。 后來還是不夠用,于是干脆不再要求低字節(jié)一定是127號之后的內(nèi)碼,只要第一個(gè)字節(jié)是大于127就固定表示這是一個(gè)漢字的開始,不管后面跟的是不是擴(kuò)展字 符集里的內(nèi)容。結(jié)果擴(kuò)展之后的編碼方案被稱為 GBK 標(biāo)準(zhǔn),GBK包括了GB2312 的所有內(nèi)容,同時(shí)又增加了近20000個(gè)新的漢字(包括繁體字)和符號。 ????? 后來少數(shù)民族也要用電腦了,于是我們再擴(kuò)展,又加了幾千個(gè)新的少數(shù)民族的字,GBK擴(kuò)成了 GB18030。從此之后,中華民族的文化就可以在計(jì)算機(jī)時(shí)代中傳承了。 中國的程序員們看到這一系列漢字編碼的標(biāo)準(zhǔn)是好的,于是通稱他們叫做 “DBCS“(Double Byte Charecter Set 雙字節(jié)字符集)。在DBCS系列標(biāo)準(zhǔn)里,最大的特點(diǎn)是兩字節(jié)長的漢字字符和一字節(jié)長的英文字符并存于同一套編碼方案里,因此他們寫的程序?yàn)榱酥С种形奶?理,必須要注意字串里的每一個(gè)字節(jié)的值,如果這個(gè)值是大于127的,那么就認(rèn)為一個(gè)雙字節(jié)字符集里的字符出現(xiàn)了。那時(shí)候凡是受過加持,會(huì)編程的計(jì)算機(jī)僧侶 們都要每天念下面這個(gè)咒語數(shù)百遍: “一個(gè)漢字算兩個(gè)英文字符!一個(gè)漢字算兩個(gè)英文字符……” 4、問題再現(xiàn):因?yàn)楫?dāng)時(shí)各個(gè)國家都像中國這樣搞出一套自己的編碼標(biāo)準(zhǔn),結(jié)果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼,連大陸和臺灣這樣只相隔了150海 里,使用著同一種語言的兄弟地區(qū),也分別采用了不同的 DBCS 編碼方案——當(dāng)時(shí)的中國人想讓電腦顯示漢字,就必須裝上一個(gè)”漢字系統(tǒng)”,專門用來處理漢字的顯示、輸入的問題,但是那個(gè)臺灣的愚昧封建人士寫的算命程序 就必須加裝另一套支持 BIG5 編碼的什么”倚天漢字系統(tǒng)”才可以用,裝錯(cuò)了字符系統(tǒng),顯示就會(huì)亂了套!這怎么辦?而且世界民族之林中還有那些一時(shí)用不上電腦的窮苦人民,他們的文字又怎 么辦? 5、一個(gè)叫 ISO (國際標(biāo)誰化組織)的國際組織決定著手解決這個(gè)問題。他們采用的方法很簡單:廢了所有的地區(qū)性編碼方案,重新搞一個(gè)包括了地球上所有文化、所有字母和符號 的編碼!他們打算叫它”Universal Multiple-Octet Coded Character Set”,簡稱 UCS, 俗稱 “unicode“。那么UCS-2和UCS-4是什么意思?UCS-2是指用兩個(gè)字節(jié)對應(yīng)一個(gè)字符的編碼字符集;UCS-4則是指用四個(gè)字節(jié)對應(yīng)一個(gè)字符的編碼字符集。你可以認(rèn)為,目前為止Unicode有兩個(gè)具體的編碼字符集,UCS-2和UCS-4。 6、問題又來了:unicode同樣也不完美,這里就有兩個(gè)的問題,一個(gè)是,如何才能區(qū)別unicode和ascii?計(jì)算機(jī)怎么知道三個(gè)字節(jié)表示一個(gè)符號,而不是 分別表示三個(gè)符號呢?第二個(gè)問題是,我們已經(jīng)知道,英文字母只用一個(gè)字節(jié)表示就夠了,如果unicode統(tǒng)一規(guī)定,每個(gè)符號用三個(gè)或四個(gè)字節(jié)表示,那么每 個(gè)英文字母前都必然有二到三個(gè)字節(jié)是0,這對于存儲空間來說是極大的浪費(fèi),文本文件的大小會(huì)因此大出二三倍,這是難以接受的。 7、unicode在很長一段時(shí)間內(nèi)無法推廣,直到互聯(lián)網(wǎng)的出現(xiàn),為解決unicode如何在網(wǎng)絡(luò)上傳輸?shù)膯栴},于是面向傳輸?shù)谋姸?UTF(UCS Transfer Format)標(biāo)準(zhǔn)出現(xiàn)了,顧名思義,UTF-8就是每次8個(gè)位傳輸數(shù)據(jù),而UTF-16就是每次16個(gè)位。UTF-8就是在互聯(lián)網(wǎng)上使用最廣的一種unicode的實(shí)現(xiàn)方式,這是為傳輸而設(shè)計(jì)的編碼 ? 來說說概念吧: 字符集合(Character set):是一組形狀的集合,例如所有漢字的集合,發(fā)明于公元前,發(fā)明者是倉頡。它體現(xiàn)了字符的“形狀”,它與計(jì)算機(jī)、編碼等無關(guān)。編碼字符集(Coded character set):是一組字符對應(yīng)的編碼(即數(shù)字),為字符集合中的每一個(gè)字符給予一個(gè)數(shù)字。例如最早的編碼字符集ASCII,和后來的unicode(持續(xù)更新中)。由于編碼字符集為每一個(gè)字符賦予一個(gè)數(shù)字,因此,字符可以認(rèn)為就是一個(gè)16位的數(shù)字,因此以下方式都可以給字符賦值: char c=‘中’ char c =0x4e2d char c=20013 字符編碼方案(Character-encoding schema):將字符編碼(數(shù)字)映射到一個(gè)字節(jié)數(shù)組的方案,因?yàn)樵诖疟P里,所有信息都是以字節(jié)的方式存儲的。因此16位字符必須轉(zhuǎn)換為一個(gè)字節(jié)數(shù)組才能夠存儲。例如UTF-8字符編碼方案,它可以將一個(gè)字符轉(zhuǎn)換為1、2、3或者4個(gè)字節(jié)。
一般認(rèn)為,編碼字符集和字符編碼方案合起來被稱之為字符集(Charset),這是一個(gè)術(shù)語,要和前面的字符集合(Character set)區(qū)分開。 ?
二、UTF-8
UTF-8最大的一個(gè)特點(diǎn),就是它是一種變長的編碼方式。它可以使用1~4個(gè)字節(jié)表示一個(gè)符號,根據(jù)不同的符號而變化字節(jié)長度。UTF-8的編碼規(guī)則很簡單,只有二條:1)對于單字節(jié)的符號,字節(jié)的第一位設(shè)為0,后面7位為這個(gè)符號的unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。2)對于n字節(jié)的符號(n>1),第一個(gè)字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進(jìn)制位,全部為這個(gè)符號的unicode碼。下表總結(jié)了編碼規(guī)則,字母x表示可用編碼的位。Unicode符號范圍 | UTF-8編碼方式(十六進(jìn)制) | (二進(jìn)制)
--------------------+---------------------------------------------
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
三、Little-Endian、Big-Endian
字節(jié)序就是數(shù)據(jù)在內(nèi)存中存放的順序,多于一個(gè)字節(jié)的數(shù)據(jù)在內(nèi)存中存放時(shí)有兩種選擇,即Big Endian和Little Endian。Little-Endian就是低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。
Big-Endian就是高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。
Big Endian和Little Endian和芯片類型以及操作系統(tǒng)都有關(guān)系。
四、舉例
下面,以漢字“嚴(yán)”為例,演示如何實(shí)現(xiàn)UTF-8編碼。 已知“嚴(yán)”的unicode是4E25(100111000100101),根據(jù)上表,可以發(fā)現(xiàn)4E25處在第三行的范圍內(nèi)(0000 0800-0000 FFFF),因此“嚴(yán)”的UTF-8編碼需要三個(gè)字節(jié),即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,從“嚴(yán)”的最后一個(gè)二進(jìn)制位開始,依次從后向前填入格式中的x,多出的位補(bǔ)0。這樣就得到了,“嚴(yán)”的UTF-8編碼是“11100100 10111000 10100101”,這是保存在計(jì)算機(jī)中的實(shí)際數(shù)據(jù),轉(zhuǎn)換成十六進(jìn)制就是E4B8A5,轉(zhuǎn)成十六進(jìn)制的目的為了便于閱讀。1. Unicode與UTF-8之間的轉(zhuǎn)換通過上一節(jié)的例子,可以看到“嚴(yán)”的Unicode碼是4E25,UTF-8編碼是E4B8A5,兩者是不一樣的。它們之間的轉(zhuǎn)換可以通過程序?qū)崿F(xiàn)。在Windows平臺下,有一個(gè)最簡單的轉(zhuǎn)化方法,就是使用內(nèi)置的記事本小程序Notepad.exe。打開文件后,點(diǎn)擊“文件”菜單中的“另存為”命令,會(huì)跳出一個(gè)對話框,在最底部有一個(gè)“編碼”的下拉條。bg2007102801.jpg里面有四個(gè)選項(xiàng):ANSI,Unicode,Unicode big endian 和 UTF-8。1)ANSI是默認(rèn)的編碼方式。對于英文文件是ASCII編碼,對于簡體中文文件是GB2312編碼(只針對Windows簡體中文版,如果是繁體中文版會(huì)采用Big5碼)。2)Unicode編碼指的是UCS-2編碼方式,即直接用兩個(gè)字節(jié)存入字符的Unicode碼。這個(gè)選項(xiàng)用的little endian格式。3)Unicode big endian編碼與上一個(gè)選項(xiàng)相對應(yīng)。我在下一節(jié)會(huì)解釋little endian和big endian的涵義。4)UTF-8編碼,也就是上一節(jié)談到的編碼方法。選擇完”編碼方式“后,點(diǎn)擊”保存“按鈕,文件的編碼方式就立刻轉(zhuǎn)換好了。三、 Little endian和Big endian上一節(jié)已經(jīng)提到,Unicode碼可以采用UCS-2格式直接存儲。以漢字”嚴(yán)“為例,Unicode碼是4E25,需要用兩個(gè)字節(jié)存儲,一個(gè)字節(jié)是4E,另一個(gè)字節(jié)是25。存儲的時(shí)候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。那么很自然的,就會(huì)出現(xiàn)一個(gè)問題:計(jì)算機(jī)怎么知道某一個(gè)文件到底采用哪一種方式編碼?Unicode規(guī)范中定義,每一個(gè)文件的最前面分別加入一個(gè)表示編碼順序的字符,這個(gè)字符的名字叫做”零寬度非換行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。這正好是兩個(gè)字節(jié),而且FF比FE大1。如果一個(gè)文本文件的頭兩個(gè)字節(jié)是FE FF,就表示該文件采用大頭方式;如果頭兩個(gè)字節(jié)是FF FE,就表示該文件采用小頭方式。四、 實(shí)例下面,舉一個(gè)實(shí)例。打開”記事本“程序Notepad.exe,新建一個(gè)文本文件,內(nèi)容就是一個(gè)”嚴(yán)“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8編碼方式保存。然后,用文本編輯軟件UltraEdit中的”十六進(jìn)制功能“,觀察該文件的內(nèi)部編碼方式。1)ANSI:文件的編碼就是兩個(gè)字節(jié)“D1 CF”,這正是“嚴(yán)”的GB2312編碼,這也暗示GB2312是采用大頭方式存儲的。2)Unicode:編碼是四個(gè)字節(jié)“FF FE 25 4E”,其中“FF FE”表明是小頭方式存儲,真正的編碼是4E25。3)Unicode big endian:編碼是四個(gè)字節(jié)“FE FF 4E 25”,其中“FE FF”表明是大頭方式存儲。4)UTF-8:編碼是六個(gè)字節(jié)“EF BB BF E4 B8 A5”,前三個(gè)字節(jié)“EF BB BF”表示這是UTF-8編碼,后三個(gè)“E4B8A5”就是“嚴(yán)”的具體編碼,它的存儲順序與編碼順序是一致的。推薦這篇文章看一下:http://wiki.ubuntu.org.cn/index.php?title=Unicode&variant=zh-cn#.E8.B5.B7.E6.BA.90.E8.88.87.E7.99.BC.E5.B1.95 4.解決的問題:一、如何在中文系統(tǒng)中運(yùn)行非Unicode編碼程序?
有很多意大利文版(除英文版)學(xué)習(xí)軟件、百科全書等軟件在中文系統(tǒng)上會(huì)出現(xiàn)亂碼,解決方法:
WindowsXP內(nèi)核是Unicode編碼,支持多語種,對于Unicode編碼的應(yīng)用程序會(huì)正常顯示原文(因?yàn)閣indows核心是用unicode代碼寫的,所以不存在問題),但是,很多程序不是用Unicode編碼寫的,這時(shí)WindowsXP系統(tǒng)可以指定以特定的編碼運(yùn)行非Unicode編碼程序,中文版WindowsXP默認(rèn)的是“簡體中文GB2312”。你只需在控制面板--〉區(qū)域和語言選項(xiàng)--〉高級--〉為非Unicode程序的語言選擇“意大利語”,即可正確運(yùn)行意大利文版的游戲程序。分析:我理解的流程是這樣:程序------>意大利語編碼(轉(zhuǎn)換表codepage)------>解釋成unicode識別的編碼(通過指定的轉(zhuǎn)換表將非 Unicode 的字符編碼轉(zhuǎn)換為同一字符對應(yīng)的系統(tǒng)內(nèi)部使用的 Unicode 編碼)------>被系統(tǒng)翻譯成意大利文(因?yàn)槊總€(gè)unicode編碼對應(yīng)了相應(yīng)的意大利文字),便可以正常顯示了。二、消除網(wǎng)頁亂碼?網(wǎng)頁亂碼是瀏覽器對HTML網(wǎng)頁解釋時(shí)形成的,如果網(wǎng)頁制作時(shí)編碼為繁體big5,瀏覽器卻以編碼gb2312顯示該網(wǎng)頁,就會(huì)出現(xiàn)亂碼,因此只要你在瀏覽器中也以繁體big5顯示該網(wǎng)頁,就會(huì)消除亂碼。打個(gè)比方有些像字典,繁體字得用繁體字典來查看,簡體字得用簡體字典來查看,不然你看不懂。 【解決辦法】:在瀏覽器中選擇“編碼”菜單,事先為瀏覽器安裝多語言支持包(例如在安裝IE時(shí)要安裝多語言支持包),這樣當(dāng)瀏覽網(wǎng)頁出現(xiàn)亂碼時(shí),即可手工更改查看此網(wǎng)頁的編碼方式,在瀏覽器中選擇菜單欄下的“查看”/“編碼”/“自動(dòng)選擇”/簡體中文(GB2312),如為繁體中文則選擇“查看”/“編碼”/“自動(dòng)選擇”/繁體中文(BIG5),其他語言依此類推,便可消除網(wǎng)頁亂碼現(xiàn)象。 分析:因?yàn)榉斌wbig5編碼后的文件,每個(gè)文字對應(yīng)一個(gè)二進(jìn)制流(假設(shè)是1212對應(yīng)繁這個(gè)字),當(dāng)我們以編碼gb2312顯示該網(wǎng)頁時(shí),gb2312編碼會(huì)到表里去找1212(二進(jìn)制流不會(huì)變的)對應(yīng)誰,肯定不再是繁這個(gè)字了,當(dāng)然顯示的就不再是那個(gè)繁字了,也就會(huì)出現(xiàn)亂碼了。這樣理解簡單些,其實(shí)中間還要轉(zhuǎn)換成同一字符對應(yīng)的系統(tǒng)內(nèi)部使用的 Unicode 編碼,然后通過系統(tǒng)底層unicode編碼還原成相應(yīng)字符顯示出來。 原文地址:到底u(yù)tf-8和unicode是什么關(guān)系 - - ITeye技術(shù)網(wǎng)站
?
posted on 2017-05-08 16:05 風(fēng)雨一肩挑 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/hiwuchong/p/6825527.html
總結(jié)
以上是生活随笔為你收集整理的Unicode、UTF-8、Big Endian、Little Endian、GBK、UCS-2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fixedBox固定div漂浮代码 支持
- 下一篇: 十一周进度