ASCll,Unicode,GBK,UTF8,UTF16,UTF32

字符集

字符集定義了二進(jìn)制和字符間的對應(yīng)關(guān)系,為每個字符分配了唯一的編號,可以理解成一個很大的表格列出了所有字符和二進(jìn)制的對應(yīng)關(guān)系,計算機(jī)顯示文字或者存儲文字,就是一個查表的過程。

我們平常在稱呼ASCll,unicode,時候,經(jīng)常稱呼他們ASCll碼,unicode編碼,用GBK編碼,但是嚴(yán)格意義上來說,ASCll,unicode,GBK是字符集,是把計算機(jī)中的0101 0101 與 “abc、漢字,其他文字” 一一對應(yīng)起來的一套字符集。

ASCll是美國那邊發(fā)明的一套字符集,采用一個字節(jié)來存儲英文字母,阿拉伯?dāng)?shù)字等,0000 0000后七位存儲2^7 = 128 個字符,這樣我們收到一個8位二進(jìn)制數(shù)據(jù)就可以通過ASCll表中查出對應(yīng)的字母。

但是每個國家的語言文字不同,一個字節(jié)的后七位,肯定不夠存儲,所以就有了每個國家不同的字符集對照表,例如中國的GBK字符集,采用兩個字節(jié)來存儲漢字,如 “字” ,在計算機(jī)二進(jìn)制數(shù)據(jù)就是0000 0000 0000 0000 這種形式。很多地方稱呼GBK編碼也是沒有不對,因為GBK和ASCll等一些字符集在創(chuàng)造的時候就考慮了編碼,很難區(qū)分兩者的概念。

后來為了統(tǒng)一各國之間的字符集,創(chuàng)造了unicode字符集,又稱之為萬國碼。

編碼方案

上面的GBK,ASCll,Unicode只是給字符定義了編號,二進(jìn)制數(shù)據(jù)就相當(dāng)于他們的編號。
我們還需要UTF8,UTF16,UTF32 等編碼方案Unicode
字符存儲到計算機(jī)中。上面的三種編碼方案就是Unicode的編碼方案

  • UTF 是 Unicode Transformation Format 的縮寫,意思是“Unicode轉(zhuǎn)換格式”,后面的數(shù)字表明至少使用多少個比特位(Bit)來存儲字符。
  1. UTF-8,一種可以變長變短的編碼方案,使用1-6個字節(jié)存儲。
  2. UTF-32, 一種固定長度的編碼方案,不管字符編號大小,始終使用4個字節(jié)來存儲。
  3. UTF-16,介于上面兩種編碼方案之間,采用2個或者4個字節(jié),長度既固定又可變。

UTF-8編碼規(guī)則:
看最高字節(jié),有幾個1就用幾個字節(jié)來編碼。如果是0則用一個字節(jié)存儲。

  • 0xxxxxxx:單字節(jié)編碼形式,這和 ASCII 編碼完全一樣,因此 UTF-8 - - 是兼容 ASCII 的;
  • 110xxxxx 10xxxxxx:雙字節(jié)編碼形式(第一個字節(jié)有兩個連續(xù)的 1);
  • 1110xxxx 10xxxxxx 10xxxxxx:三字節(jié)編碼形式(第一個字節(jié)有三個連續(xù)的 1);
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx:四字節(jié)編碼形式(第一個字節(jié)有四個連續(xù)的 1)。
    對于常用字符,它的Unicode編號范圍0~FFFF,1~3個字節(jié)存儲,只有少數(shù)地區(qū)使用的字符才需要4~6個字節(jié)存儲。

UTF-32編碼規(guī)則
UTF-32是固定長度的編碼,始終占用4個字節(jié),足以容納所有的Unicode字符,所以直接存儲Unicode編號即可。浪費了空間,提高了效率。

UTF-16編碼規(guī)則
對于Unicode編號范圍在0~FFFF之間的字符,UTF-16使用兩個字節(jié)存儲,并且直接存儲Unicode編號,不用進(jìn)行編碼轉(zhuǎn)換,這和UTF-32非常類似。

以上三種編碼只有UTF-8兼容ASCll,UTF-32和UTF-16都不兼容ASCll,因為它們沒有單子節(jié)編碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. ASCII ??我們知道,計算機(jī)內(nèi)部是通過二進(jìn)制數(shù)據(jù)進(jìn)行操作的,所有的信息最終都會轉(zhuǎn)換為一個二進(jìn)制值,二進(jìn)制...
    騎著烏龜去看海閱讀 1,855評論 0 4
  • 字符是用戶可以讀寫的最小單位。計算機(jī)所能支持的字符組成的集合,就叫做字符集。字符集通常以二維表的形式存在。二維表的...
    劉惜有閱讀 8,388評論 2 14
  • 一、前言 為什么要進(jìn)行編碼,這些編碼的關(guān)系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unic...
    雪吹西門詩閱讀 483評論 0 0
  • 摘自網(wǎng)絡(luò)+修改整理 最初的unicode編碼是固定長度的,16位,也就是2兩個字節(jié)代表一個字符,這樣一共可以表示6...
    楓葉落盡閱讀 1,006評論 0 0
  • 目標(biāo)日更100篇已過, 但似乎不想停, 怎么說呢? 我似乎有些舍不得了, 突破80篇到達(dá)100篇的彼岸后, 感覺超...
    野淳閱讀 262評論 0 3

友情鏈接更多精彩內(nèi)容