国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
dannyrao: 字符編碼

字符編碼

[概述]
      計(jì)算機(jī)中的一切都是以數(shù)字來(lái)表示的,字符同樣如此。字符編碼就是將字符集編碼成為數(shù)字序列,以便能讓計(jì)算機(jī)識(shí)別。各個(gè)地區(qū)和國(guó)家使用的語(yǔ)言有別,將本地使用的語(yǔ)言符號(hào)進(jìn)行編碼就得到本地編碼字符集。例如西歐國(guó)家使用的本地編碼是ISO8859-1,中國(guó)大陸和新加坡等地區(qū)使用本地編碼是GB2312或GBK,中國(guó)港臺(tái)地區(qū)使用的本地編碼是BIG5,韓國(guó)和日本的本地編碼分別是euc-kr和Shift_JIS。電腦的操作系統(tǒng)支持各種本地編碼字符集,操作系統(tǒng)默認(rèn)的本地編碼和你所安裝的操作系統(tǒng)語(yǔ)言版本是一致的。本地集只對(duì)本地使用的文字符號(hào)進(jìn)行了編碼,并不包括其他地區(qū)使用的文字,即使兩個(gè)本地集中包含了相同的字符,這個(gè)字符的編碼值也是不同的。例如“中”的GB2312或GBK編碼值為“0xD6D0”,而B(niǎo)IG5編碼值為“0xA4A4”。
      全球信息交流與融合的趨勢(shì)要求實(shí)現(xiàn)對(duì)本地字符集的統(tǒng)一,1984年4月ISO成立了工作組,針對(duì)各國(guó)文字、符號(hào)進(jìn)行統(tǒng)一編碼,這種編碼成為Unicode。Unicode于1992年6月通過(guò)DIS(DrafInternationalStandard),V2.0版本于1996年發(fā)布。Unicode編碼包括了符號(hào)6811個(gè)、漢字20902個(gè)、韓文11172個(gè)、等等。Unicode雖然實(shí)現(xiàn)了全球統(tǒng)一編碼,但是在字符集數(shù)量和編碼效率方面顯然存在著不足,而UTF-8、UTF-16就是針對(duì)Unicode編碼進(jìn)行轉(zhuǎn)換或擴(kuò)充形成的編碼,UTF是Unicode Translation Format的縮寫(xiě)。
 
[細(xì)節(jié)]
關(guān)于ASCII編碼
      ASCII編碼是美國(guó)標(biāo)準(zhǔn)信息交換碼,這種編碼方式針對(duì)的是英文字符。ASCII編碼使用一個(gè)字節(jié)對(duì)字符進(jìn)行編碼,而且字節(jié)的最高位都為0,因此ASCII編碼的字符集大小是128個(gè)。由于英文字母僅有26個(gè),再加上其他一些常用符號(hào),總大小也不會(huì)超過(guò)128個(gè),因此ASCII編碼的空間是足夠的。例如,字符“a”被編碼為0x61,字符“b”被編碼為0x62等等。注意,在有的時(shí)候ASCII泛指本地編碼,例如文本編輯器UltraEdit中有諸如“ASCII轉(zhuǎn)Unicode”的功能,這里的ASCII就泛指本地編碼,如果本地編碼是GBK,這個(gè)功能執(zhí)行的就是GBK編碼到Unicode編碼的轉(zhuǎn)換。
 
關(guān)于ISO8859-1編碼
      ISO8859-1是西歐語(yǔ)系國(guó)家通用的字符集編碼,ISO8859-1使用一個(gè)字節(jié)對(duì)字符進(jìn)行編碼,編碼值范圍是0x00-0xFF。其中,0x00-0x1F用作控制字,0x20-0x7F表示字母、數(shù)字和符號(hào)這些圖形字符,0xA0-0xFF作為附加部分使用。由于ASCII編碼只使用了一個(gè)字節(jié)中的低7位,編碼范圍僅為0-127,雖然可以容納英文字符和其他的一些符號(hào),但是卻不能包含除英文以外的其他西歐語(yǔ)言的字母,因此ASCII編碼在西歐國(guó)家并不通用。針對(duì)這個(gè)問(wèn)題ISO在ASCII編碼的基礎(chǔ)上進(jìn)行了擴(kuò)充,制定了ISO8859-1編碼,ISO8859-1編碼使用了一個(gè)字節(jié)的全部8位,編碼范圍是0-255,能包含西歐語(yǔ)系的所有字母和符號(hào)。
 
關(guān)于GB2312、GBK和BIG5編碼
      GB2312碼是中華人民共和國(guó)國(guó)家漢字信息交換使用碼,全稱(chēng)《信息交換使用漢字編碼字符集-基本集》,由國(guó)家標(biāo)準(zhǔn)總局發(fā)布,1981年5月1日實(shí)施,中國(guó)大陸和新加坡等地使用此編碼。GB2312收錄了簡(jiǎn)化漢字、符號(hào)、字母、日文假名等共計(jì)7445個(gè)字符,其中漢字占6763個(gè)。GB2312將代碼表分區(qū)94個(gè)區(qū)(0xA1-0xFE),對(duì)應(yīng)第一個(gè)字節(jié),每個(gè)區(qū)94個(gè)位(0xA1-0xFE),對(duì)應(yīng)了第二字節(jié),兩個(gè)字節(jié)的值分別為區(qū)號(hào)的值和位號(hào)的值加32(0x20),因此也被稱(chēng)為區(qū)位碼。GB2312的編碼范7圍是0x2121-0x777E,與ASCII有重疊,通常方法是將GB碼的兩個(gè)字節(jié)的最高位置1區(qū)別。
      GBK是GB2312-80的擴(kuò)展,向上兼容,包含了20902個(gè)漢字,編碼范圍是0x8140-0xFEFE,剔除高位0x80的字位,其他字符都可以一一映射到Unicode2.0。GB18030-2000(GBK2K)在GBK的基礎(chǔ)上增加了藏、蒙等少數(shù)民族的字符,GBK2K從根本上解決了字位不夠、字形不足的問(wèn)題。GBK2K首先要求實(shí)現(xiàn)能夠完全映射到Unicode3.0標(biāo)準(zhǔn)的所有字形,現(xiàn)在還沒(méi)有任何一個(gè)操作系統(tǒng)支持GBK2K。
      BIG5碼被稱(chēng)為大五碼,是中國(guó)港臺(tái)地區(qū)使用的字符編碼方式。TW-BIG5碼將所有字分為兩大群,即常用字區(qū)和次常用字區(qū),每個(gè)字區(qū)分都采用筆畫(huà)排序,同筆畫(huà)的字依部首排序。TW-BIG5每個(gè)字由兩個(gè)字節(jié)組成,第一個(gè)字節(jié)編碼范圍是0xA1-0xF9,第二個(gè)字節(jié)編碼范圍是0x40-0x7E和0xA1-0xFE,共計(jì)收入13868個(gè)字,其中包括5401個(gè)常用字、7652個(gè)次常用字、7個(gè)擴(kuò)充字、以及808個(gè)其他符號(hào)。
 
關(guān)于Unicode編碼
      ISO(國(guó)際化標(biāo)準(zhǔn)組織)將全世界所有的符號(hào)進(jìn)行統(tǒng)一編碼,稱(chēng)為Unicode編碼。Unicode編碼的字符占用兩個(gè)字符的大小,對(duì)于ASCII碼表示的字符,Unicode只是簡(jiǎn)單的在ASCII碼原來(lái)的一個(gè)字節(jié)碼值上增加一個(gè)所有位全為0的字節(jié)。Unicode使用兩個(gè)字節(jié)編碼,因此能表示的字符集最大為65536,另外Unicode中還保留兩千多個(gè)數(shù)值未用于字符編碼。由于Unicode編碼的空間有限,只能包含各個(gè)地區(qū)常用的字符而非所有字符,因此,在相當(dāng)長(zhǎng)的一段時(shí)間里,本地化字符編碼和Unicode編碼將共存。
 
關(guān)于UTF-8和UTF-16編碼
      UTF-8和UTF-16編碼仍然屬于Unicode編碼,它們是在Unicode編碼基礎(chǔ)上進(jìn)行了轉(zhuǎn)換或擴(kuò)展。例如在Windows XP和2000操作系統(tǒng)中,Unicode編碼指的就是UTF-16編碼。
      UTF-8編碼是將Unicode編碼中不同范圍的字符采用不同的字節(jié)進(jìn)行編碼,對(duì)于ASCII編碼的字符仍使用一個(gè)字節(jié)進(jìn)行編碼,UTF-8編碼完全兼容ASCII編碼。與Unicode想比較,UTF-8編碼使得英文文檔的占用空間減小了一半,因此UTF-8頗受英語(yǔ)系國(guó)家的青睞。除此之外,UTF-8編碼中不會(huì)出現(xiàn)值為0x0000的數(shù)據(jù),這樣避免了和某些程序語(yǔ)言產(chǎn)生沖突,而UTF-8編碼的補(bǔ)充位使得數(shù)據(jù)能夠被方便的檢測(cè)出傳輸過(guò)程中是否發(fā)生錯(cuò)誤。通常,UTF-8編碼都使用“EF BB BF”三個(gè)字節(jié)數(shù)據(jù)作為文件開(kāi)頭。

      Unicode編碼和UTF-8編碼結(jié)構(gòu)的對(duì)應(yīng)關(guān)系如下:
        Unicode編碼值                         UTF-8編碼結(jié)構(gòu)
        \u0001 - \u007E                      0XXXXXXX
        \u0080 - \u07FF 和 \u0000       110XXXXX 10XXXXXX
        \u0800 - \uFFFF                      1110XXXX 10XXXXXX 10XXXXXX
 
      Unicode編碼與UTF-8編碼的轉(zhuǎn)換如下(U8代表UTF-8編碼,U代表Unicode編碼):
      1) 位于Unicode編碼空間 \u0001-\u007F之間的字符(即編碼使用位小于8位的字符),UTF-8采用一個(gè)字節(jié)對(duì)這些字符進(jìn)行編碼。直接將Unicode編碼的低位取出就得到了UTF-8編碼。轉(zhuǎn)換過(guò)程可表示為:U8 = (byte)U。
      2) 位于Unicode編碼空間\u0080-\u07FF之間的字符以及\u0000表示的字符(即編碼使用位為8-11位的字符,以及空字符),UTF-8采用兩個(gè)字節(jié)對(duì)這些字符進(jìn)行編碼。這時(shí)候,將Unicode編碼轉(zhuǎn)換為UTF-8編碼的方法是:將Unicode編碼的低6位取出,在前面補(bǔ)充“10”作為低字節(jié);將7-11位取出,在前面補(bǔ)充“110”作為高字節(jié)。轉(zhuǎn)換過(guò)程可表示為:U8 = [(byte)(0xC0 | (0x01F & (U>>6)),(byte)(0x80 | (0x3F & U)]。
      3) 位于Unicode編碼空間\u080-\uFFFF之間的字符(即編碼使用位為12-16位的字符),UTF-8采用三個(gè)字節(jié)對(duì)這些字符進(jìn)行編碼。這時(shí)候,將Unicode編碼轉(zhuǎn)換為UTF-8編碼的方法是:將Unicode編碼的低6位取出,在前面補(bǔ)充“10”作為低字節(jié);將7-12位取出,在前面補(bǔ)充“10”作為中字節(jié);將13-16位取出,在前面補(bǔ)充“1110”作為高字節(jié)。轉(zhuǎn)換過(guò)程可表示為:U8 = [(byte)(0xE0 | (0x0F & (U>>12))),(byte)(0x80 | (0x03F & (U>>6)),(byte)(0x80 | (0x3F & U)]。
 
      UTF-16編碼在Unicode基礎(chǔ)上進(jìn)行了一些細(xì)節(jié)上的擴(kuò)充,增加了對(duì)Unicode編碼沒(méi)有包括的字符的表示方式。UTF-16對(duì)Unicode的擴(kuò)充并沒(méi)有影響Unicode編碼中的原有字符,容易看出Unicode是UTF-16的子集。Unicode編碼將0xD800-0xDFFF區(qū)間的數(shù)值保留,被稱(chēng)為代理區(qū)間,區(qū)間共包含2048個(gè)數(shù)值,其中0xD800-0xD6FF是高半代理區(qū),0xDC00-0xDFFF是低半代理區(qū)。UTF-16編碼就是在Unicode編碼基礎(chǔ)上利用代理區(qū)擴(kuò)充字符編碼的機(jī)制。UTF-16編碼從兩個(gè)區(qū)域分別取一個(gè)編碼,組成一個(gè)4字節(jié)的代理對(duì)來(lái)表示一個(gè)編碼字符,就能夠在Unicode基礎(chǔ)上擴(kuò)充了1024*1024個(gè)字符。UTF-16足夠用來(lái)編碼全球的所有字符,微軟從Windows2000開(kāi)始支持UTF-16編碼。
 
關(guān)于Little-Endian和Big-Endian
      在不同體系的計(jì)算機(jī)系統(tǒng)中,編碼的Unicode字符在內(nèi)存中存儲(chǔ)的順序是不同的。使用Inter生產(chǎn)的CPU的計(jì)算機(jī),內(nèi)存中數(shù)據(jù)存儲(chǔ)通常是低字節(jié)在前,高字節(jié)在后,這種存儲(chǔ)方式被稱(chēng)為L(zhǎng)ittle-Endian。在對(duì)于一些計(jì)算機(jī),內(nèi)存中數(shù)據(jù)存儲(chǔ)通常是高字節(jié)在前,低字節(jié)在后,這種存儲(chǔ)方式被稱(chēng)為Big-Endian。
      UTF-16編碼的文件通常在文件開(kāi)頭用字符標(biāo)志出使用的存儲(chǔ)方式:若文件開(kāi)頭是“0xFF 0xFF”,表示文件其余部分是Little-Endian的 UTF-16編碼;若文件開(kāi)頭是“0xFE 0xFF”,表示文件其余部分是Big-Endian的 UTF-16編碼。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
深入分析Oracle字符集(轉(zhuǎn)載)
struts原理與實(shí)踐(4)
java 字符編碼處理
字符編碼學(xué)習(xí)筆記
字符集與編碼問(wèn)題小結(jié)
編碼又見(jiàn)編碼
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服