1. 程式人生 > 實用技巧 >預習非數值資料的編碼方式

預習非數值資料的編碼方式

1.非數值資料的編碼方式:
用邏輯值表示:是邏輯資料的表示,只能參加邏輯運算。
用西文字元表示:由拉丁字母,數字,標點符號以及一些特殊符號表示,他們統稱字元
用漢字字元表示:包括漢字的輸入碼,和碼,以及字符集。
2.非數值資料的型別:
邏輯資料,字元資料,漢字資料,影象資料,聲音資料,等等,不是表示數字的資料都是非數值資料。
3.編碼的區別

ASCII編碼:ASCII 碼使用指定的7 位或8 位二進位制數組合來表示128 或256 種可能的字元。標準ASCII 碼也叫基礎ASCII碼,使用7 位二進位制數(剩下的1位二進位制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號, 以及在美式英語中使用的特殊控制字元。

GBK編碼:由於ASCII編碼不支援中文,因此,當中國人用到計算機時,就需要尋求一種編碼方式來支援中文。於是,國人就定義了一套編碼規則:當字元小於127位時,與ASCII的字元相同,但當兩個大於127的字元連線在一起時,就代表一個漢字,第一個位元組稱為高位元組(從0xA1-0xF7),第二個位元組為低位元組(從0xA1-0xFE),這樣大約可以組合7000多個簡體漢字。這個規則叫做GB2312。

Unicode編碼:因為世界國家很多,每個國家都定義一套自己的編碼標準,結果相互之間誰也不懂誰的編碼,就無法進行很好的溝通交流,所以及時的出現了一個組織ISO(國際標準化組織)決定定義一套編碼方案來解決所有國家的編碼問題,這個新的編碼方案就叫做Unicode。注意Unicode不是一個新的編碼規則,二是一套字符集(為每一個「字元」分配一個唯一的 ID(學名為碼位 / 碼點 / Code Point)),可以將Unicode理解為一本世界編碼的字典。ISO規定:每個字元必須使用倆個位元組,即用16位二進位制來表示所有的字元,對於ASCII編碼表裡的字元,保持其編碼不變,只是將長度擴充套件到了16位,其他國家的字元全部統一重新編碼。由於傳輸ASCII表裡的字元時,實際上可以只用一個位元組就可以表示,所以,這種編碼方案在傳輸資料比較浪費頻寬,儲存資料比較浪費硬碟。

UTF-8編碼:由於Unicode比較浪費網路頻寬和硬碟,因此為了解決這個問題,就在Unicode的基礎上,定義了一套編碼規則(將「碼位」轉換為位元組序列的規則(編碼/解碼 可以理解為 加密/解密 的過程)),這個新的編碼規則就是UTF-8,採用1-4個字元進行傳輸和儲存資料。

編碼規則:使用下面的模板進行轉換

Unicode符號範圍(十六進位制) | UTF-8編碼方式(二進位制)

0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
utf-8區分每個字元的開始是根據字元的高位位元組來區分的,比如用一個位元組表示的字元,第一個位元組高位以“0”開頭;用兩個位元組表示的字元,第一個位元組的高位為以“110”開頭,後面一個位元組以“10開頭”;用三個位元組表示的字元,第一個位元組以“1110”開頭,後面倆位元組以“10”開頭;用四個位元組表示的字元,第一個位元組以“11110”開頭,後面的三個位元組以“10”開頭。

4.校驗碼的方式:

奇偶校驗碼:是一種增加二進位制傳輸系統最小距離的簡單和廣泛採用的方法。奇偶校驗可描述為:給每一個碼字加一個校驗位,用它來構成奇性或偶性校驗。可以看出,附加碼元d2,是簡單地用來使每個字成為偶性的。因此,若有一個碼元是錯的,就可以分辨得出,因為奇偶校驗將成為奇性。奇偶校驗編碼通過增加一位校驗位來使編碼中1個個數為奇數(奇校驗)或者為偶數(偶校驗),從而使碼距變為2。因為其利用的是編碼中1的個數的奇偶性作為依據,所以不能發現偶數位錯誤。

海明校驗碼:它不僅具有檢測錯誤的能力,同時還具有給出錯誤所在準確位置的能力 但是因為這種海明校驗的方法只能檢測和糾正一位出錯的情況。所以如果有多個錯誤,就不能查出了。  假設為k個數據位設定r個校驗位,則校驗位能表示2^r個狀態,可用其中的一個狀態指出 "沒有發生錯誤",用其餘的2 ^r -1個狀態指出有錯誤發生在某一位,包括k個數據位和r個校驗位,因此校驗位的位數應滿足如下關係:
2^r ≥ k + r + 1 (2.7)
如要能檢出與自動校正一位錯,並能同時發現哪位錯,此時校驗位的位數r和資料位的位數k應滿足下述關係:
2^r-1 ≥ k + r (2.8)

迴圈校驗碼:迴圈冗餘校驗碼由資訊碼n位和校驗碼k位構成。k位校驗位拼接在n位資料位後面,n+k為迴圈冗餘校驗碼的字長,又稱這個校驗碼(n+k,n)碼。 [4]
n位資訊位可以表示成為一個報文多項式M(x),最高冪次是xn-1。約定的生成多項式G(x)是一個k+1位的二進位制數,最高冪次是xk。將M(x)乘以xk,即左移k位後,除以G(x),得到的k位餘數就是校驗位。這裡的除法運算是模2除法,即當部分餘數首位是1時商取1,反之商取0。然後每一位的減法運算是按位減,不產生借位。