Unicode ASCII UTF-8 GBK關系

字符集

首先必須知道一個概念 - 字符集

計算機中的所有字符, 說到底都是用二進制的 0/1 排列組合來表示的, 因此就需要有一個規范來規定每個字符對應 0/1 排列組合, 這樣的規范就是字符集.

Unicode, ASCII, GB2312, GBK 都是字符集. UTF-8不是!

ASCII

最早的計算機在設計時采用 8 個 bit 作為一個字節 - byte, 所以, 一個字節能表示的范圍就是 00000000 到 11111111, 也就是 0 到 255, 一共 256 種狀態, 每一個狀態對應一個符號, 可以表示 256 個符號.

美國有關的標準化組織就出臺了 ASCII 編碼, 對英語字符, 數字以及部分符號與二進制位之間的關系, 做了統一規定, 一共規定了 128 個字符的編碼. 只占用了一個字節的后面 7 位, 最前面一位統一規定為 0, 一直沿用至今.

每個 ASCII 編碼占用一個字節, 即 8 bit.

如果加上最前面一位, 即后 128 個最前面一位為 1 的編碼, 被稱為擴展ASCII碼. 顯示英語用 前 128 個符號編碼就夠了, 但是用來表示其他語言是不夠的. 比如, 在法語中, 字母上方有注音符號, 它就無法用 ASCII 碼表示. 于是, 一些歐洲國家就利用字節中閑置的最高位編入新的符號. 比如, 法語中的 é 的編碼為 130(二進制10000010). 這樣一來, 這些歐洲國家使用的編碼體系, 可以表示最多 256 個符號.

但是中文怎么辦?

GBK與GB2312

如果要表示中文, 顯然一個字節是不夠的, 至少需要兩個字節, 而且還不能和 ASCII 編碼沖突, 所以, 中國制定了 GB2312 編碼, 用來把中文編進去.

后來發現這 GB2312 還是不夠用, 漢字實在是太多了, 于是國內程序員又對這個字符集進行了擴充, 總之最后擴充成了GBK標準, GBK 依舊使用兩個字節表示一個漢字. GBK 是在 GB2312 基礎上擴容后兼容 GB2312 的標準.

同理, 日文和韓文等其他語言也有這個問題. 為了統一所有文字的編碼, Unicode 應運而生.

Unicode

它為每種語言中的每個字符設定了統一并且唯一的二進制編碼, 能夠使計算機實現跨語言、跨平臺的文本轉換及處理.

Unicode 與 ASCII 是兼容的, 通常用兩個字節表示一個字符, 原有的英文編碼從單字節變成雙字節,只需要把高字節全部填為 0 就可以.

但是, 這里就有一個問題, 這些英文字母只需要一個字節就能存儲, 現在用兩個字節, 文件的體積就可能要擴大兩倍. 這沒辦法接受!

因此,Unicode 有了各種各樣的實現形式,最出名的是UTF-8

UTF-8

UTF-8 就是在互聯網上使用最廣的一種 Unicode 的實現方式.

UTF-8 最大的一個特點, 就是它是一種變長的編碼方式. 它可以使用1~4個字節表示一個符號, 根據不同的符號而變化字節長度.

UTF-8 的編碼規則:

  1. 對于單字節的符號, 字節的第一位設為0, 后面7位為這個符號的 Unicode 碼. 因此對于英語字母, UTF-8 編碼和 ASCII 碼是相同的.
  2. 對于 n 字節的符號(n > 1), 第一個字節的前 n 位都設為1, 第 n + 1 位設為 0, 后面字節的前兩位一律設為 10. 剩下的沒有提及的二進制位, 全部為這個符號的 Unicode 碼.

舉例:

Unicode符號范圍(十六進制) UTF-8編碼方式(二進制)
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

總結

  1. Unicode, ASCII, GB2312, GBK 都是字符集. UTF-8不是.
  2. Unicode 只規定了符號的二進制代碼, 并沒有規定這個二進制代碼應該如何進行存儲. UTF-8 是則是 Unicode 儲存的實現方式之一.
  3. GB2312 是為了解決 ASCII 不支持中文的問題.
  4. GBK 是在 GB2312 基礎上擴容后兼容 GB2312 的標準.

參考

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