程序中的編碼常識

程序中的編碼問題

       相信很多小夥伴在開始學編程的時候就很奇怪一個問題,什麼時候是ASCII編碼,什麼時候是Unicode碼,什麼時候是UTF-8編碼…這些問題大多時候很多人可能都囫圇吞棗,不求甚解,不多說了,我也是這樣,所以爲了方便更多的小夥伴瞭解這個問題,我整理了一下程序中的編碼知識。

參考鏈接:字符與編碼

編碼發展史

       在計算機發展之初,美國作爲計算機發源地,制定了美國信息交換標準代碼,也就是我們日常所說 的ASCII碼(American Standard Code for Information Interchange),其中根據拉丁字母(拉丁字母(也稱爲羅馬字母)是多數歐洲語言採用的字母系統,是世界上最通行的字母文字系統。)制定了一套標準,其中包含了有128個字符。
       可是隨着計算機的發展,世界上其他很多國家也需要將自己的文字系統加入到計算機系統中,想一想,如果不將漢字加入進去,我們能夠傳輸我們的中文信息嗎?於是我們國家也制定了一套自己的編碼系統:(來自維基百科GB2312

GB 2312 或 GB 2312–80 是中華人民共和國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,通常簡稱GB,又稱GB0,由中國國家標準總局發佈,1981年5月1日實施。GB 2312編碼通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎所有的中文系統和國際化的軟件都支持GB 2312。

這個和GBK是啥關係啊?

       在我們國家制定了GB 2312編碼後,後面有逐漸增加了一些字符,所以有了GBK(漢字內碼擴展規範,其中K就是中文意思中的擴展之意),其後又爲了擴大,制定了GB18030編碼規範。
China Encode
       同樣的道理,其他國家也肯定製定了自己的編碼規則,例如日本的Shift_JIS,韓國的Euc-kr等等,所以爲了規避在網絡世界裏大家各自爲政,不便交流的問題,所以產生了Unicode編碼(百度百科):

Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裏的一項業界標準,包括字符集、編碼方案等。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每個字符設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。

       但是Unicode編碼中規定了通常都是2個字節,生僻字佔4個字節。要知道的是ASCII碼中每個字符都是隻佔1個字節啊,這樣就導致了一個問題是:我們都是用英文字符(通俗的說法)來寫的代碼,這樣的話Unicode編碼可就比ASCII碼至少多了一倍的傳輸量,這樣很不利於資源的節約,所以在此基礎上UTF-8編碼應運而生(維基百科):

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

       UTF-8採用了16個字節來存貯字符,其中字母1個字節,漢字3個字節,生僻字4到6個字節。

總結圖:

編碼總結

用處呢?

現在計算機系統通用的字符編碼工作方式:

在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換爲UTF-8編碼。

       用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件:
在這裏插入圖片描述

       瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器:
在這裏插入圖片描述

       所以現在知道爲什麼我們網頁傳輸的時候通常都會看見utf-8了吧:
Google

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章