今天白月黑羽和你們說說字符編碼python
咱們眼睛看到的電腦上顯示的字,包括漢字、英文、日文、韓文,這些文字,在計算機內部是怎麼存儲的?網站
難道是刻上去的? 好比刻在硬盤上一個個這樣的字?編碼
固然不是,計算機都是用數字存儲信息的。code
用 磁場、電信號 等物理介質的 正負 狀態 表示 0 和 1,若是一個數字只由0和1 表示,就是一個2進制的數字表示法。orm
用連續的0和1,就能夠表明很大的數字。ip
好比unicode
二進制 的 10
就表示十進制 的 2
get
二進制 的 110
就表示十進制 的 6
it
從右向左,每位 上的 1 分別表明 2的0次方(就是1), 2的1次方(就是2),2的2次方(就是4),2的3次方(就是8) 等等, 依次類推。io
根據不一樣的使用場合,數字能夠表示不一樣的意義。
好比,須要存儲 顏色
信息的時候, 0 能夠用來表明 白色, 1 表明紅色, 2 表明 黑色等等。
若是有10000種顏色,能夠用 0 到 9999 一共 10000個數字分別表明他們。
一樣的, 咱們要存儲 文字
信息,也能夠用不一樣的數字來表明不一樣的文字。
計算機是美國人發明的,因此在開始的時候, 他們也沒有想到未來要支持全世界的文字。
因此,最先的時候,他們定義了一個規範,定義一些數字 用來表明美國人使用的文字符號。
而美國人的單詞都是用字母拼出來的, 因此他們經常使用的基礎文字符號比較少。
就是字母,再加上 !@#$%^&*(){[]}+- 等等這些符號,也就100多個。
他們定義的規範就叫 ASCII (American Standard Code for Information Interchange) ,中文大意就是 美國信息交換標準碼
你們能夠參考 百度上面的ASCII表
這個 ASCII 碼裏面用128個數字表明瞭128個字符。
要存儲和傳輸這 128個字符對應的文字信息 也很簡單, 二進制有 8 位就足夠了。
由於2的8次方等於256,能夠存儲 從 0 到255 一共 256個數字, 能夠表示 最多 256 個文字符號。
二進制有 8 位 的長度 被稱爲 一個 字節 。
因此一個字節就能夠存放 任何一個ASCII 文字符號。
ASCII 這樣的 用數字表明文字符號的規範,就被稱之爲 字符集
後來計算機傳遍了全世界,其它國家的文字符號就多了。
咱們中文,就有這麼多的文字符號。小學的時候,咱們有個3000經常使用字表(我驕傲一下,小學1年級我就認識了近2000多個字), 光經常使用字就有3千個。
固然還有 韓文、日文、繁體中文、阿拉伯文等等。
顯然ASCII是不夠的,咱們須要其它的數字來表明這些文字符號。
開始各個國家和地區 本身定義了本身的 字符集。
好比咱們中國就定義另一套規範, 規定了 用什麼樣的數字表明什麼樣的文字符號。
這套規範也在不斷的升級,包括 GB23十二、GBK、GB18030
各個國家定義了各國的文字的字符集,這就帶來了一個問題。
如今全球交流很密切,有時一篇文章會使用多國文字,好比 同時使用 日文和中文。 而沒有各國的字符集是不包含別國文字的, 這時就無法在一篇文章中存儲多國文字了。
爲了解決這個問題。 國際標準化組織定義了一個字符集,想包括世界上全部的文字符號。
這就是大名鼎鼎的 unicode 字符集。
這個字符集裏面包括了現今世界上的經常使用文字符號 和 其對應的數字表示。
這樣就解決了在一篇文章中包含多國文字的問題了。
unicode 出現了,很好,可是還有一個問題。 字符怎麼存儲和傳輸。
最初只有ASCII碼的時候,一個字節(最多能夠表示256個字符)就能夠存儲傳輸任何文字。
因此軟件硬件對 每一個字符都是用字節(8位二進制數字)來進行存儲、傳輸的。 沒有什麼問題。
可是unicode裏面有10多萬的文字符號,數字範圍 遠遠 超過 一個字節所能表明的數字。
因此一個字節不夠。
那麼怎麼用多個字節來 表示這些數字呢?
這就有須要另外的規範。這些 如何用字節表示 字符對應的數字 就是 字符編碼 規範
unicode字符 的編碼,最經常使用的規範是 UTF8 和 UTF16 。
好比 UTF8 表示 中文字符 你 ,就是用 3個字節表示的,對應的16進製表示是 E4 、BD、 A0
固然咱們中文字符集gb系列使用另外的編碼規範。
之後,咱們會寫一篇文章,以UTF8爲例,講解它是如何用多個字節存儲 數字的。
這裏咱們只要知道 不一樣的 編碼規範 對數字有不一樣的 用字節表示的方法就好了。
有了編碼規範,字符集 中的數字就能夠進行存儲和傳輸了
瞭解更多內容,請百度白月黑羽,或移步白月黑羽的官方網站