字元編碼筆記

2022-08-16 03:00:19 字數 1466 閱讀 6828

1. ascii碼和非ascii碼

ascii碼

我們知道,在計算機內部,所有的資訊最終都表示為乙個二進位制的字串。每乙個二進位制位(bit)有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為乙個位元組(byte)。也就是說,乙個位元組一共可以用來表示256種不同的狀態,每乙個狀態對應乙個符號,就是256個符號,從0000000到11111111。8個二進位制位表示乙個位元組(byte), 乙個位元組有256中狀態

上個世紀60年代,美國制定了一套字元編碼,對英語字元與二進位制位之間的關係,做了統一規定。這被稱為ascii碼,一直沿用至今。

ascii碼一共規定了128個字元的編碼,比如空格"space"是32(二進位制00100000),大寫的字母a是65(二進位制01000001)。這128個符號(包括32個不能列印出來的控制符號),只占用了乙個位元組的後面7位,最前面的1位統一規定為0。

非 ascii碼

英語用128個符號編碼就夠了,但是用來表示其他語言,128個符號是不夠的。比如,在法語中,字母上方有注音符號,它就無法用ascii碼表示。於是,一些歐洲國家就決定,利用位元組中閒置的最高位編入新的符號。比如,法語中的é的編碼為130(二進位制10000010)。這樣一來,這些歐洲國家使用的編碼體系,可以表示最多256個符號。

但是,這裡又出現了新的問題。不同的國家有不同的字母,因此,哪怕它們都使用256個符號的編碼方式,代表的字母卻不一樣。比如,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母gimel (ג),在俄語編碼中又會代表另乙個符號。但是不管怎樣,所有這些編碼方式中,0--127表示的符號是一樣的,不一樣的只是128--255的這一段。

至於亞洲國家的文字,使用的符號就更多了,漢字就多達10萬左右。乙個位元組只能表示256種符號,肯定是不夠的,就必須使用多個位元組表達乙個符號。比如,簡體中文常見的編碼方式是gb2312,使用兩個位元組表示乙個漢字,所以理論上最多可以表示256x256=65536個符號。

中文編碼的問題需要專文討論,這篇筆記不涉及。這裡只指出,雖然都是用多個位元組表示乙個符號,但是gb類的漢字編碼與後文的unicode和utf-8是毫無關係的。

unicode編碼

由於非ascii碼中同一編碼不同國家表示的字元不一致問題,出現了unicode編碼。unicode編碼中每個編碼對應乙個符號,是乙個符號集。它規定了字元的二進位制**,沒有規定這個二進位制**如何儲存,例如乙個符號占用多個位元組(漢字);所以出現了unicode多種儲存方式。(utf-8, utf-16(字元用兩個或4個位元組表示), utf-32(字元用四個位元組表示))

unicode編碼與utf-8

utf-8是unicode實現方式之一, 是一種變長的編碼方式,可以使用1-4個位元組表示字元,根據不同的符號變化位元組長度。

字元編碼筆記

在用python處理多個檔案的時候,裡面存有不同編碼,使用晚上copy的編碼判斷也不好使,而我的目的也很簡單,就是在第二行加入一串文字,比如123456.那麼,在不同編碼下是否能通過讀取二進位制位元組的方式判斷到 n呢?結論在我們中文編碼和utf8中,是可以的,實際上所有的非可見字元都是可以的編碼都...

字元編碼學習筆記

1.編碼方式 數字 代表什麼 顯示為什麼 編碼 ascii,gbk,unicode 字型檔案 編碼,點陣字型 所謂的編碼,是用預先規定的方法將文字 數字或其他物件程式設計數碼。ascii碼 用乙個位元組的低七位來表示英文本元 數字和其他一些符號。也就是 說我們看到的這些字元 數字在計算機中都有對應的...

iOS 筆記 字元編碼

獲取的data是有資料的,轉換成字串愣是沒資料,經過多方面研究發現了自己的錯誤,以前一直用的解碼方式都是utf8的,所以習慣了 nsstring string nsstring alloc initwithdata data encoding nsutf8stringencoding 結果字串一直是...