你文件亂碼了麼

  之前對文件的編碼,解碼一直停留在很抽象的層面,就想着各種編碼方式,什麼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

  這裏只是簡單的介紹一下,關於各種編碼的相關知識真的是很多很多,感興趣的一定要自己去多學習( ̄▽ ̄)ノ

 

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