關於「編碼」的有趣描述

2021-08-27 18:15:20 字數 1943 閱讀 4752

**:

基本概念很簡單。首先,我們從一段資訊即訊息說起,訊息以人類可以理解、易懂的表示存在。我打算將這種表示稱為「明文」(plain text)。對於說英語的人,紙張上列印的或螢幕上顯示的英文單詞都算作明文。

其次,我們需要能將明文表示的訊息轉成另外某種表示,我們還需要能將編碼文字轉回成明文。從明文到編碼文字的轉換稱為「編碼」,從編碼文字又轉回成明文則為「解碼」。

編碼問題是個大問題,如果不徹底解決,它就會像隱藏在叢林中的小蛇,時不時地咬你一口。

那麼到底什麼是編碼呢?

//ascii

再說簡單點,計算機只懂二進位制數字!

所以,目的明確了:如何將我們能識別的符號唯一的與一組二進位制數字對應上?於是美利堅的同志想到通過乙個電平的高低狀態來代指0或1,

八個電平做為一組就可以表示出

256種不同狀態,每種狀態就唯一對應乙個字元,比如a--->00010001,而英文只有26個字元,算上一些特殊字元和數字,128個狀態也夠

用了;每個電平稱為乙個位元為,約定8個位元位構成乙個位元組,這樣計算機就可以用127個不同位元組來儲存英語的文字了。這就是ascii編碼。

擴充套件ansi編碼

剛才說了,最開始,乙個位元組有八位,但是最高位沒用上,預設為0;後來為了計算機也可以表示拉丁文,就將最後一位也用上了,

從128到255的字符集對應拉丁文啦。至此,乙個位元組就用滿了!

//gb2312

計算機漂洋過海來到中國後,問題來了,計算機不認識中文,當然也沒法顯示中文;而且乙個位元組所有狀態都被佔滿了,萬惡的帝國主義亡

我之心不死啊!我黨也是棒,自力更生,自己重寫一張表,直接生猛地將擴充套件的第八位對應拉丁文全部刪掉,規定乙個小於127的字元的意

義與原來相同,但兩個大於127的字元連在一起時,就表示乙個漢字,前面的乙個位元組(他稱之為高位元組)從0xa1用到0xf7,後面乙個位元組

(低位元組)從0xa1到0xfe,這樣我們就可以組合出大約7000多個簡體漢字了;這種漢字方案叫做 「gb2312」。gb2312 是對 ascii 的中文擴充套件。

//gbk 和 gb18030編碼

但是漢字太多了,gb2312也不夠用,於是規定:只要第乙個位元組是大於127就固定表示這是乙個漢字的開始,不管後面跟的是不是擴充套件字符集裡的

內容。結果擴充套件之後的編碼方案被稱為 gbk 標準,gbk 包括了 gb2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。

//unicode編碼:

很多其它國家都搞出自己的編碼標準,彼此間卻相互不支援。這就帶來了很多問題。於是,國際標誰化組織為了統一編碼:提出了標準編碼準

則:unicode 。

unicode是用兩個位元組來表示為乙個字元,它總共可以組合出65535不同的字元,這足以覆蓋世界上所有符號(包括甲骨文)

//utf8:

unicode都一統天下了,為什麼還要有乙個utf8的編碼呢?

大家想,對於英文世界的人們來講,乙個位元組完全夠了,比如要儲存a,本來00010001就可以了,現在吃上了unicode的大鍋飯,

得用兩個位元組:00000000 00010001才行,浪費太嚴重!

基於此,美利堅的科學家們提出了天才的想法:utf8.

utf-8(8-bit unicode transformation format)是一種針對unicode的可變長度字元編碼,它可以使用1~4個位元組表示乙個符號,根據

不同的符號而變化位元組長度,當字元在ascii碼的範圍時,就用乙個位元組表示,所以是相容ascii編碼的。

這樣顯著的好處是,雖然在我們記憶體中的資料都是unicode,但當資料要儲存到磁碟或者用於網路傳輸時,直接使用unicode就遠不如utf8省空間啦!

這也是為什麼utf8是我們的推薦編碼方式。

unicode與utf8的關係:

一言以蔽之:unicode是記憶體編碼表示方案(是規範),而utf是如何儲存和傳輸unicode的方案(是實現)這也是utf與unicode的區別。

深度有趣(2) 自編碼

自編碼器 這個應用其實很學術化,為了去燥而去燥。因為訓練樣本是有雜訊的影象。目標樣本是沒有雜訊的影象。試想一下,怎麼去找這個影象呀?模型 編碼器 解碼器 編碼器 輸入有雜訊的影象,最後編碼為多個特徵圖 7 7 32 解碼器 輸入為編碼器的輸出 7 7 32 輸出為原圖大小 28 28 1 損失函式 ...

演算法科普 有趣的遊程編碼

在這個大資料時代,我們儲存的資料量有時候往往是非常龐大的,儲存它將會耗費非常多的記憶體,讀取速度也相對減慢了。因此常常需要對資料進行壓縮編碼儲存,等到要用到這個資料的時候再解壓縮就行,這樣不僅可以節約大量的儲存空間,而且節省了系統讀取和反應的時間。柵格資料壓縮編碼的方法有很多種,包括鏈式編碼 行程編...

關於hashcode的那些有趣的事情

hashcode的作用是讓基於雜湊的集合正常的執行,這些雜湊的集合有 hashset hashmap以及hashtable。舉個例子 當我們需要新增乙個元素的時候a進set的時候,我們會計算出a的hashcode,然後求餘,得到這個雜湊值應該在哪個桶裡,最後在桶裡邊找有沒有雜湊值跟a這個元素的雜湊值...