位(bit)、字節(byte)、字符、編碼

一、位/比特位

位/比特位,數據存儲的最小單位。每個二進制數字0或者1就是1個位。

二、字節(Byte)

字節(Byte)是一種計量單位,表示數據量多少,它是計算機信息技術用于計量存儲容量的一種計量單位。

8個位構成一個字節。即:1 byte (字節)= 8 bit (位);
1 B = 1 byte(字節);
1 KB = 1024 B(字節);
1 MB = 1024 KB;(2^10 B)
1 GB = 1024 MB;(2^20 B)
1 TB = 1024 GB;(2^30 B)

三、字符

字符是指計算機中使用的文字和符號,比如1、2、3、A、B、C、~!·#¥%……—* () ——+、等等。

a、A、中、+、*、の......均表示一個字符;
一般 utf-8 編碼下,一個漢字字符占用 3 個 字節;
一般 gbk 編碼下,一個漢字字符占用 2 個 字節;

四、“字節”與“字符”

它們完全不是一個維度的概念,所以兩者之間沒有“區別”這個說法。不同編碼里,字符和字節的對應關系不同:

①ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0,最大值255。

②UTF-8編碼中,一個英文字符等于一個字節,一個中文(含繁體)等于三個字節。

③Unicode編碼中,一個英文等于兩個字節,一個中文(含繁體)等于兩個字節。
符號:英文標點占一個字節,中文標點占兩個字節。舉例:英文句號“.”占1個字節的大小,中文句號“。”占2個字節的大小。

④UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要2個字節(Unicode擴展區的一些漢字存儲需要4個字節)。

⑤UTF-32編碼中,世界上任何字符的存儲都需要4個字節。

五、字符集

即各種各個字符的集合。也就是說漢字,字母(A、b、c)和符號(空格、引號..)會被收入標準中。

六、編碼

utf-8和Unicode實際上并不是同一個層次的概念。

規定每個“字符”分別用一個字節還是多個字節存儲,用哪些字節來存儲,這個規定就叫做“編碼”。(其實際是對字符集中進行編碼,即:每個字符用二進制在計算中表示存儲);
通俗的說:編碼就是按照規則將字符翻譯成對應的二進制數,在計算器中運行存儲,用戶看的時候(比如瀏覽器),再用對應的編碼解析成用戶可看懂的。
1??美國ASCII碼
在計算機發明的時候,由于計算機只能表示二進制的數據,美國為了交流通信方便,約定了一個編碼系統,就是ASCII碼,把abc..xyz...ABC...XYZ...!@#...等字符分別和0,1,2,3,4......對應,發現差不多剛好128個數,半個字節的長度,為了防止以后需要為新的符號編碼,于是干脆取一個字節,最高位置為0,后七位從0-127分別對每一個符號編碼。于是,計算機每次讀取一個字節,然后參照ASCII表把這些編碼翻譯成字符。
【標準ASCII字符集】
有96個打印字符,和32個控制字符組成。一共96+32=128個;
用7位二進制數來對每1個字符進行編碼;而由于7位還還不夠1個字節,而電腦的內部常用字節來用處理,每個字節中多出來的最高位用0替代;
0 000 0000.........................0
0 111 1111..........................127;
從0----127,來表示128個ACSii編碼;

比如:
字符 'A'----------在計算器內部用0100 0001 (65)來表示;
字符'a'-----------在計算器內部用0 110 0001 (97)來表示;

注意:'10'在計算器內部是沒有編碼的,因為它是字符串,而不是單個字符。可以分別對1,0字符編碼存儲;

【擴展ASCii字符集】將標準的ASCii最高位1,得到十進制代碼128---255(1 000 0000----1 111 1111);所以字符集一共有0---255, 256個字符;

【gb2312字符集】所有漢字字符在計算機內部采用2個字節來表示,每個字節的最高位規定為1【正好與標準ASCii字符(最高位是0)不重疊,并兼容】,不支持繁體字。所以,gb2312表示漢字的編碼為:129--255 (兩個字節,每個字節最高位是1);小于127的字符,與ASCii編碼相同。

2??歐洲ISO
后來歐洲人發現很多符號(法語,德語),ASCII沒辦法表示,于是他們約定了一套編碼,一個字節的長度,把最高位也用掉了。這套編碼叫ISO。和ASCII表類似,計算機也是每次只讀一個字節,然后按照ISO表,解碼出字符。

3??中國GBK
中國漢字有幾萬個,常用的有幾千個,沒有兩個字節無法表示。于是用了兩個字節來表示中文,整出一套GBK。同時兼容了ASCII編碼。gbk編碼規定,計算機不能在每次都只讀一個字節那么死板了,要先看看第一位是不是為0,要是為0的話,就當作ASCII碼來讀入一個字節,不然的話就讀入兩個字節。

【gbk字符集】gb2312的擴充,兼容gb2312,除了收錄gb2312所有的字符外,還收錄了其他不常見的漢字、繁體字等。gbk中字符是一個或兩個字節,單字節字符00--7F(0---127)這個區間和ASCII是一樣的;雙字節字符的第一個字節是在81--FE(129--254)之間。通過這個可以判斷是單字節還是雙字節,即:在gbk字符編碼,如果第一個字節是>128的,則再往后找一個字節,組成漢字;如果第一個字節<128,則表示的是一個單字節(此時和ASCII是一樣的);

4??unicode
如此,各方交流很不方便。這個時候,unicode編碼就出現了。這套編碼表的編號從0一直算到了100多萬(三個字節)。每一個區間都對應著一種語言的編碼。目前幾乎收納了全世界大部分的字符。所有的字符都有唯一的編號,這就解決了解碼的沖突。但是,unicode沒有為編碼的二進制傳輸和二進制解碼做出規定。

計算機每次讀取三個字節,參照Unicode表解碼不行嗎?想法是好的,但是如果類似1號編碼這樣的小數據編號也要三個字節的話,即0x000001,這樣很浪費。于是,就出現了uft-8,utf-16,utf-32這些編碼方案。utf-16是用兩個字節來編碼所有的字符,utf-32則選擇用4個字節來編碼。下面只講一下utf-8這種解決方案,因為它用的最多,用得最多是因為在當時它的方案最好,最節省資源。

【Unicode字符集】容納世界上所有語言字符和符號的集合(以及對應的二進制數字)
Unicode只是一個編碼規范,目前實際實現的unicode編碼只有三種:UTF-8,UCS-2和UTF-16,三種unicode字符集之間可以按照規范進行轉換。

utf-8編碼:UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,也是一種前綴碼。它可以用來表示Unicode標準中的任何字符,且其編碼中的第一個字節仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先采用的編碼。

utf-8為了節省資源,采用變長編碼,編碼長度從1個字節到6個字節不等。

看起來,utf-16更加節省資源,節省空間。但實際上,當時互聯網上絕大部分存在的資源都是英文的,英文在utf-16中也是2個字節,而在utf-8中則是1個字節。在當時,顯然是utf-8更加節省資源。現在在中文世界里來比較,則是utf-16更加節省資源。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容