從計算機的根上學習字符集

2021-10-06 19:00:58 字數 3085 閱讀 4832

小提示

不要將字元與位元組搞混,字元是文化符號,而位元組是乙個長度單位。

使用不同字符集編碼相同的字元內容,所產生的檔案大小也是不一樣的。

askⅱ編碼:美國標準資訊互換碼。

最初的這套編碼只被標識,大寫英文本母,小寫英文本母,數字0到9,所有英文的標點符號,數**算符,以及一些特殊字元。把所有的這些字元加起來,總共也不超過128個字元。128是2的7次方,所以計算機利用7個bit位就能標識所有字元。後來imb在此基礎上又擴充了一些字元,就形成了現在的用8個bit位標識所有字元,也就是能標識2的8次方256個字元。

ask碼是單位元組碼,每個字元用8個bit位乙個位元組就能表示

gb2312:簡體中文編碼表。

由於ask編碼,只能標識256個西方文化符號,當中國人用的時候,已經沒有可用的位元組狀態來表示漢字,況且中文光常用的文字就有6000多個。因此中國在ask碼的基礎之上進行了擴充套件。前127個單字元編碼不變,127以後用兩個位元組16個bit位,來表示乙個字元。乙個漢字用兩個位元組標識,2的16次方是65535,大大提高了漢字字元個數,開始字符集中只有6763個漢字,後來經過擴充套件又新增了2萬個漢字,形成了後來的gbk編碼。

unicode字符集:萬國碼,統一字符集。

由於世界各國都像中國一樣,各自有一套自己標準的字符集,而且相互之間誰也不懂誰的編碼,無法做到跨平台,跨語言的支援,所以iso(國際標準化組織)為了適應全球化的發展,開始著手解決編碼不統一的問題,捨棄了所有地區性編碼方案,重新搞了一套包括世界上所有文化,字母,符號的編碼,統一字符集,簡稱unicode。

unicode字符集的特點

正是由於unicode字符集較於ask碼字符集,在很多字元標識的時候存在很大的空間浪費,我能用8位表示,你偏偏要用16位表示。很多時候資料需要在網際網路上進行傳輸的,這樣的化就會帶來很大的網路頻寬的浪費,為了減少浪費,提高網路利用率,出現了一些中間格式的字符集,被稱為統一的轉換格式(unicode transformation format),即utf編碼。utf是unicode字符集的編碼方式

utf-16比較好理解就是任何字元都用兩個位元組來儲存。此時常常將unicode和utf-16等同對待。

utf-16編碼效率最高,字元到位元組相互轉換更簡單,進行字串操作也更好,適合本地記憶體和磁碟之間使用,可以進行字元和位元組的快速轉換。但是不適合做網路傳輸使用。

檔案在網路中傳輸是以bit流的形式展開的,如果採用utf-16編碼的資料,接收的時候每16位一切就是乙個字元;utf-8編碼是可變位元組編碼,文字資料讀取是乙個位元組乙個位元組來讀取的,然後根據位元組開頭的bit標識來識別,然後確定幾個位元組是乙個字元單元。

utf-8字符集中,原unicode字元編號從0到127,前128個字元是單位元組編碼,編號在128至2047的是雙位元組編碼(2的11次方),編號在2048之後就是三位元組編碼

切分字元以後怎樣識別可變,三種情況分別為:

utf-8檔案中,askⅱ碼占用乙個位元組,中文佔三個位元組長度,相比較utf-16,更適合網路傳輸,節省傳輸流量大小。

###utf-8檔案的解碼過程

有個乙個utf-8編碼的檔案,檔案內容如下:

「aá一」

分別是英文本母"a", 法語字母"à", 漢字"一"

第1步獲取16進製制編碼

61 c3 a9 e4 b8 80

第2步轉換為二進位制編碼:

01100001

11000011

10100001

11100100

10111000

10000000

此時能看出該文字共有六個位元組。到底哪個位元組是乙個字元單元呢?

第3步根據utf-8編碼規則將位元組分組:

01100001

11000011

10100001

11100100

10111000

10000000

第4步重新計算,得出對應的unicode字符集的二進位制編碼:

00000000 01100001

00000000 11100001

01001110 00000000

計算規則是,去除二進位制位的標紅標誌位,然後合併到一起,合併成乙個16位二進位制數。如果不足16位,高位用0補齊

第5步計算機從unicode字符集中,利用二進位制對應的編號反查出字元為:

二進位制編號轉成十進位制字元編號為:

97225

19968

在html中檔案利用html實體可以查出來字元

a;á;&19968;

輸出:aá一

在utf8中空格是佔三個位元組,十進位制編號為65279在utf16中空格是佔兩個位元組,十進位制編號為65534雖然乙個漢字在utf-8編碼中佔三個位元組編碼,但是計算機unicode字符集中字元編號是乙個雙位元組編碼,這是計算機在反查之前,將utf-8三個位元組,每8位去除了標識位,然後拼接重組形成unicode 16位二進位制字元編號。有了這個雙位元組字元編號就可以去unicode字符集反查相應的字元了。字元編號由utf-8編碼,轉成了unicode編碼。

關於計算機字符集編碼

頁是字符集編碼的別名,也有人稱 程式碼頁 早期,頁是ibm稱呼電腦bios本身支援的字符集編碼的名稱。當時通用的作業系統都是命令列介面系統,這些作業系統直接使用bios 的vga功能來顯示字元,作業系統的編碼支援也就依靠bios的編碼。現在這bios 頁被稱為oem 頁。圖形作業系統解決了此問題,圖...

學習字符集的一些體會

剛剛看的這一部分,感到為什麼我們當時學習字元 比較難理解,我感覺是因為我們沒有這方面的歷史!所以理解起來比較費勁,所以學習什麼東西都要了解它的歷史呀。字符集簡史 雖然不能確定人類開始講話的時間,但書寫已有大約6000年的歷史了。實際上,早期書寫的內容是象形文本。每個字元都對應於發聲的字母表則出現於大...

計算機常識之編碼解碼字符集

編碼就是將字元對映成二進位制,解碼是將二進位制對映到字元 字符集包括以下幾種 ascii字符集 共收錄128個字元,所以使用1個位元組來進行編碼 iso 8859 1 字符集,共收錄256個字元,是在ascii字符集的基礎上又擴充了128個西歐常用字元 gb2312字符集收錄了漢字以及拉丁字母 希臘...