之前對檔案的編碼,解碼一直停留在很抽象的層面,就想著各種編碼方式,什么gbk,utf8,ascii等等,然后什么方式編碼,就用什么方式解碼,比較模糊的,而且專案中uft8編碼無處不在,今天突然學習了一下,突然有種恍然大悟的感覺,做個筆記,嘿嘿╮(╯_╰)╭
1.初始階段
首先我們要知道計算機最開始是用來干什么的?是用來計算的,而數字天生就可以用于轉換成二進制的0和1,所以這個時候完全沒有編碼的概念,總不可能在中國的100和國外的100代表的數量不同吧....
但是技術的發展,使得計算機需要處理文字資訊,最開始就是在美國,他們就在想著怎么讓計算機處理文字....
有個方法就是統計一下所有單詞,給每個單詞編個號,分別是1,2,3.....,但是一想,沒必要這樣給單詞編號,英語單詞最本質的不就是26個字母嗎,加上大小寫、特殊符號 一共也就一百多個字符,直接給每個字符進行編號1,2,3,4....,而一個位元組的范圍是0-255,足夠用于給那100多個字符編號了,于是就有人寫下了一張表,下圖所示:
注:Char就是字符,Dec就是對應的十進制數字,所有的字符+特殊符號剛好是128個,就完成了對每個字符進行編號,然后我們在計算機中文本中輸入:hello,每個字母都表示一個編號,對應的十進制編號是:104,101,108,108,111,存盤肯定需要5個位元組

使用飄準點的普通話來說:這張表全稱”美國資訊交換標準代碼標準(American Standard Code for Information Interchange)”,簡稱ASCII表,ASCII碼字符集總共的編碼有128個,包括32個通用控制符,10個十進制數碼,52個英文大小寫字母和34個專用符號,
2.發展中階段
如果計算機只有美國在使用,那肯定啥問題沒有,但是慢慢普及了之后,每個國家都有自己的電腦了;
每個國家都有每個國家的文字,總不能讓每個國家用電腦的時候都使用英語吧....比如我們中國用的是漢字,那怎么樣在計算機中處理漢字呢?簡單呀,美國之前不是已經做過了類似的事了么,我們仿照著來一遍不就行了么
于是我們國家就把每個漢字都用數字進行編號,但是漢字數量太多,常用字+生僻字一起就有兩萬多個吧,而一個位元組最大也就只能表示0-255,比較拉胯,一個不行就用兩個,那就用兩個位元組表示一個漢字吧!兩個位元組2^16=65536,足夠給每個漢字和特殊字符編號使用了吧(這里就不說磁區了,有興趣的自己去了解),于是中國版的ascii表就出來了,弄了個全新的名字,表示是我們專用:GBK
可以去這個地方去玩玩編碼:點擊這里?乛?乛?

肯定不會只有我們中國人這么聰明知道去創建張表,其他國家也不都是笨蛋呀,就好像秦國的商鞅變法的時候,其他六國肯定也沒閑著看戲,都在各種變法呀!
于是每個國家都弄了一張對應他們國家文字的表,比如日本的就叫做Shift_JIS,韓國的就叫做KSC,于是間各國紛紛跟進,各種對應的表層出不窮,就連香港和臺灣也有自己的編碼表:BIG5
例如你在香港寫的一個文本檔案,發送到大陸這邊來,你覺得看得懂么?
示例:你在香港那邊輸入了一個"我",這個字BIG5編碼對應的十進制是42970,然后將42970傳到大陸這邊,你打開檔案的時候,計算機就會根據42970在GBK表中找到對應的漢字為“и”,你看不懂吧,沒錯,你就是亂碼了,下圖所示,想要看得懂,我們只需要將GBK換成BIG5就行了

3.大一統階段
各個國家的編碼表都不一樣,很混亂,但是總會有人出來一統天下,于是就有人出來說話了:你們別搞花里胡哨的了,我用一張表把你們所有國家的文字、符號等等都給包含了得了,你們就用我這個吧!
所以就出現了一張賊雞兒大的表:Unicode,俗稱的萬國碼,這張表有多大呢?你想想你要對人類世界所有的文字,符號都進行編碼,兩個位元組最大也就是65536,肯定不夠用了;那就特喵的再加一個位元組,3個子節,最大表示一千多萬,肯定還是不夠;那就繼續加個位元組,4個位元組,最大將近就有43億了,差不多就夠了;
那么問題來了,原本一個英文字母只需要1個位元組,一個漢字只需要2個位元組,你現在都給我統統弄成4個位元組,存盤量翻倍了...所以我們需要對Unicode進行一定的處理,這種處理方式就是UTF8,這是可變的編碼;
什么叫做可變的呢?就是說使用了UTF8編碼之后,如果是英語字母,那就使用一個位元組存盤,如果是漢字,那就使用三個位元組存盤;當然為了和國際接軌,使用UTF8之后漢字比GBK多一個位元組也勉強能接受;
所以在記事本中輸入:hello你好, 使用UTF8編碼, 占用的位元組是5+3+3=11
這里只是簡單的介紹一下,關于各種編碼的相關知識真的是很多很多,感興趣的一定要自己去多學習( ̄▽ ̄)ノ
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/289051.html
標籤:其他
下一篇:Leetcode No.122 Best Time to Buy and Sell Stock II Easy(c++實作)
