九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
編碼、字符集、編碼字符集、字符集編碼之間的關(guān)系_影之國度,歌之空間_百度空間

寫代碼的時候經(jīng)常遇到編碼問題,到底什么是編碼問題呢?什么是編碼?什么是字符集?他們之間有什么關(guān)系?(某手機軟件開發(fā)公司的面試問題)

 

本文介紹了編碼字符集的概念以及Java與編碼字符集之間的關(guān)系。

1.      字符
字符是抽象的最小文本單位。它沒有固定的形狀(可能是一個字形),而且沒有值?!癆”是一個字符,“ ”(德國、法國和許多其他歐洲國家通用貨幣的標志)也是一個字符?!爸小薄皣边@是兩個漢字字符。字符僅僅代表一個符號,沒有任何實際值的意義。

2.      字符集

字符集是字符的集合。例如,漢字字符是中國人最先發(fā)明的字符,在中文、日文、韓文和越南文的書寫中使用。這也說明了字符和字符集之間的關(guān)系,字符組成字符集。

3.      編碼字符集

編碼字符集是一個字符集(有時候也被簡稱位字符集),它為每一個字符分配一個唯一數(shù)字。最早的編碼是iso8859-1,和ascii編碼相似。但為了方便表示各種各樣的語言,逐漸出現(xiàn)了很多標準編碼。


iso8859-1:屬于單字節(jié)編碼字符集,最多能表示的字符范圍是0-255,應(yīng)用于英文系列,除了iso8859-1以外還有其他iso8859系列的編碼,這些編碼都是為了滿足歐洲國家語言字符的需要而設(shè)計的。


GB2312/GBK/ GB18030:前面提到的iso8859-1最多只能表示256個字符,這對于漢字來說實在是有些抱歉,所以就有了現(xiàn)在要介紹的漢字國標碼,專門用來表示漢字,是雙字節(jié)編碼字符集,而英文字母和iso8859-1一致(兼容iso8859-1編碼)。其中GBK編碼能夠用來同時表示繁體字和簡體字,而GB2312只能表示簡體字,GBK是兼容GB2312編碼的。而GB18030-2000則是一個更復(fù)雜的字符集,采用變長字節(jié)的編碼方式,能夠支持更多的字符。需要注意的是中國政府要求所有在中國出售的軟件必須支持GB18030。


Unicode:這是最統(tǒng)一的編碼字符集,可以用來表示所有語言的字符,不兼容任何前面提到的編碼字符集。Unicode 標準始終使用十六進制數(shù)字,而且在書寫時在前面加上前綴“U+”,所以“A”的編碼書寫為“U+ 0041”。注意:在JAVA語言中書寫時應(yīng)該使用轉(zhuǎn)義符‘\u’表示,如 char charA = ‘\u0041’; 這種表示方法等與 char charA = ‘A’; 。


從ASCII(英文) ==> 西歐文字 ==> 東歐字符集(俄文,希臘語等) ==> 東亞字符集(GB2312 BIG5 SJIS等)==> 擴展字符集GBK GB18030這個發(fā)展過程基本上也反映了字符集標準的發(fā)展過程,但這么隨著時間的推移,尤其是互聯(lián)網(wǎng)讓跨語言的信息的交互變得越來越多的時候,太多多針對本地語言的編碼標準的出現(xiàn)導(dǎo)致一個應(yīng)用程序的國際化變得成本非常高。尤其是你要編寫一個同時包含法文和簡體中文的文檔,這時候一般都會想到要是用一個通用的字符集能夠顯示所有語言的所有文字就好了,而且這樣做應(yīng)用也能夠比較方便的國際化,為了達到這個目標,即使應(yīng)用犧牲一些空間和程序效率也是非常值得的。UNICODE就是這樣一個通用的解決方案。


4.      Unicode編碼字符集

Unicode 因為必須將中、韓、日、英、法、阿拉伯……等許多國家所使用的文字都納入,目前已經(jīng)包含了六萬多個字符,所以 Unicode 使用了16個位來為字符編碼。因為 Unicode 使用了 16 位編碼,所以每個字符都用 16 位來儲存或傳輸是很自然的事,這種儲存或傳輸?shù)母袷椒Q為UTF-16(一種Unicode的字符編碼方案,在這里所說的UTF-16并不涉及增補字符的表示,本文將會在稍后介紹)。但是如果你使用到的字符都是西方字符,那么你一定不會想用 UTF-16 的格式,因為體積比8位的iso8859-1多了一倍,如此一來就必須考慮程序運行時各種字符在內(nèi)存中所占空間的性能問題,這便引入了字符編碼方案的概念:

字符編碼方案是從一個或多個編碼字符集到一個或多個固定寬度代碼單元序列的映射。

最常用的代碼單元是字節(jié),所以可以簡單的認為字符編碼方案是為了告訴計算機如何將編碼字符集(如Unicode)映射到計算機可以識別的數(shù)據(jù)格式中,如字節(jié)。這種編碼方案往往能夠為他所對應(yīng)的字符集在計算機處理時提供更為優(yōu)化的空間以及性能上的解決方案。Unicode編碼字符集有三種字符編碼方案,下面將逐一介紹:


l         UTF-32* 即將每一個Unicode編碼表示為相同值的32位整數(shù)。很明顯,它是內(nèi)部處理最方便的表達方式,但是,如果作為一般字符串表達方式,則要消耗更多的內(nèi)存。顯而易見,對于英文字母的表示將需要多個0字節(jié),僅僅因為我們需要4個字節(jié)32位來表示一個Unicode字符。


l         UTF-16 使用一個或兩個未分配的 16位代碼單元的序列對Unicode編碼進行編碼。值U+0000至U+FFFF 編碼為一個相同值的16位單元。增補字符*編碼為兩個代碼單元,第一個單元來自于高代理范圍(U+D800 至 U+DBFF),第二個單元來自于低代理范圍(U+DC00 至U+DFFF)。這在概念上可能看起來類似于多字節(jié)編碼,但是其中有一個重要區(qū)別:值 U+D800 至 U+DFFF 保留用于 UTF-16;沒有這些值分配字符作為代碼點。這意味著,對于一個字符串中的每個單獨的代碼單元,軟件可以識別是否該代碼單元表示某個單單元字符,或者是否該代碼單元是某個雙單元字符的第一個或第二單元。這相當于某些傳統(tǒng)的多字節(jié)字符編碼來說是一個顯著的改進,在傳統(tǒng)的多字節(jié)字符編碼中,字節(jié)值0x41 既可能表示字母“A”,也可能是一個雙字節(jié)字符的第二個字節(jié)。


l         UTF-8 使用一至四個字節(jié)的序列對編碼Unicode進行編碼。U+0000至U+007F使用一個字節(jié)編碼,U+0080至U+07FF 使用兩個字節(jié),U+0800 至U+FFFF使用三個字節(jié),而U+10000至U+10FFFF使用四個字節(jié)。UTF-8設(shè)計原理為:字節(jié)值0x00至0x7F始終表示代碼點U+0000至U+007F(Basic Latin 字符子集,它對應(yīng) ASCII 字符集)。這些字節(jié)值永遠不會表示其他Unicode編碼字符,這一特性使 UTF-8 可以很方便地在軟件中將特殊的含義賦予某些 ASCII 字符。UTF-8 的格式在編碼英文時,只需要8位,但是中文則是24位,其他更加偏僻的字符才又可能是32位,這也是UTF-8最大的編碼特點,可以最高效率的利用計算機空間,因為在計算機處理的時候大多數(shù)情況下還是只使用英文進行運算和處理,這也是為什么還需要UTF-8的主要原因,因為畢竟互聯(lián)網(wǎng)70%以上的信息仍然是英文。如果連英文都用2個字節(jié)存取(UCS-2),空間浪費不就太多了?



* UTF--32 表示Unicode Transformation Form 32-bit form,UTF-16,UTF-8依此類推。

* Unicode 最初設(shè)計是作為一種固定寬度的 16 位字符編碼。在 Java 編程語言中,基本數(shù)據(jù)類型 char 初衷是通過提供一種簡單的、能夠包含任何字符的數(shù)據(jù)類型來充分利用這種設(shè)計的優(yōu)點。不過,現(xiàn)在看來,16 位編碼的所有65,536個字符并不能完全表示全世界所有正在使用或曾經(jīng)使用的字符。于是,Unicode 標準已擴展到包含多達 1,112,064個字符。那些超出原來的16位限制的字符被稱作增補字符

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java中的字符集編碼入門
淺談文字編碼和Unicode
刨根究底字符編碼之八——Unicode編碼方案概述
Unicode字符編碼標準
Java中的字符集編碼入門(三)GB2312,GBK與中文網(wǎng)頁
編碼又見編碼
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服