字元編碼學習總結

2021-09-27 08:41:07 字數 2279 閱讀 8927

ascii(美國資訊交換標準**)是基於拉丁字母的一套電腦編碼系統,只要用於顯示現代英語和其他西歐語言。

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

在標準的ascii中,其最高位用作奇偶校驗位。所謂的奇偶校驗是指**傳送過程中用來檢驗是否出錯誤的一種方法,一般分奇校驗和偶檢驗兩種。奇校驗規定:正確的**乙個位元組中1的個數必須是奇數,若非奇數,則在最高位添1;偶檢驗規定:正確的**乙個位元組中1的個數必須是偶數,若非偶數,則在最高位添1。

在英語中,用128個符號編碼便可以表示所有,但是用來表示其他語言,128個符號是不夠的。比如在法語中,字母上方有注音符號,它就無法用ascii碼表示。於是,一些歐洲國家就決定利用位元組中閒置的最高位編入新的符號。

不同的國家和地區制定了不同的標準,由此產生了gb2312、gbk、big5、shift_jis等各自的編碼標準。這些使用1至4個位元組來代表乙個字元的各種漢字延伸編碼方式,稱為ansi編碼。在簡體中文windows作業系統中,ansi編碼代表gbk編碼;在正體中文windows作業系統中,ansi編碼代表big5編碼;在日文windows作業系統中,ansi編碼代表shift_jis編碼。不同ansi編碼之間互不相容,當資訊在國際間交流時,無法將屬於兩種語言的文字,儲存在同一段ansi編碼的文字中。當然對於ansi編碼而言,0x00~0x7f之間的字元,依舊是1個位元組代表乙個字元。這一點時ansi編碼與unicode編碼之間最大也是最明顯的區別。

unicode是一種字元編碼方法,它是由國際組織設計,可以容納全世界所有語言文字的編碼方案。unicode的學名是「universal multiple-octet coded character set",簡稱為usc。採用了這種編碼方式後,世界上所有的語言字元都有乙個unicode編碼。

unicode雖然為所有語言所有字元都編了乙個號,但是並未規定如何儲存,傳輸這些unicode字元。例如英文的」a「,可以採用unicode編碼儲存,這樣它將占用4個位元組,但其實字元」a「用乙個位元組就可以表示。

計算機採用unicode之後,記憶體中並不存放unicode字元得編碼,而是存放字元在unicode字符集中得序號(如果是ansi字元,它們的序號和unicode編碼相同)。

目前最常用的utf編碼分為3種,utf-8、utf-16、utf-32,下面只針對utf-8進行學習。utf-8主要是針對unicode編碼的缺點進行設計的,如果用unicode編碼來儲存或傳輸乙個英文本母,需要4個位元組,但是其實只需要1個位元組就可以,這樣造成空間的極大浪費,所以utf-8編碼就是為了解決unicode的缺點而產生的。utf-8編碼最大的特點就是可邊長編碼:它根據不同的字元來改變位元組長度,比如ascii碼範圍時用乙個位元組表示(保留ascii碼的編碼方式),unicdode中中文字元佔兩個位元組,而在utf-8中佔3個位元組,而且unicode和utf-8之間需要通過一系列的演算法和規則來進行轉換並非直接轉換。

unicode與utf-8轉換表:

unicode編碼(十六進製制)

utf-8位元組流(二進位制)

0000 0000 - 0000 007f

0******x

0000 0080 - 0000 07ff

110***xx 10******

0000 0800 - 0000 ffff

1110***x 10****** 10******

0001 0000 - 001f ffff

11110*** 10****** 10****** 10******

說明:除了第一行,其他三行中utf-8列的最左邊的1的個數表示某個字元用多少個位元組表示,第一行代表乙個字元用乙個位元組表示。

例子:「漢」字的unicode編碼時0xc49(110 1100 0100 1001),通過上面的轉換表發現0x0000 6c49位於第三行的範圍,那麼得出其格式為1110***x 10****** 10******。從"漢"的二進位制數最後一位開始,從後往前依次填充對應格式中的x,多出的x用0補上。這樣就可以得到「漢」的utf-8編碼為1110 0110 1011 0001 1000 1001,轉換為十六進製制為0xe6b789。

在計算機記憶體中,統一使用unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為utf-8編碼;用記事本編輯的時候,從檔案讀取的utf-8字元被轉換為unicode字元到記憶體裡,編輯完成後,儲存的時候再把unicode轉換為utf-8儲存到檔案。瀏覽網頁的時候,伺服器會把動態生成的unicode內容轉換為utf-8再傳輸到瀏覽器,所以很多網頁的原始碼上會有類似的資訊,表示該網頁正是用的utf-8編碼。

字元編碼總結

各種編碼的檔案頭 ff fe unicode fe ff unicode big endian ef bb bf utf 8 unicode也是一種字元編碼方法,不過它是由國際組織設計,可以容納全世界所有語言文字的編碼方案。unicode的學名是 universal multiple octet c...

字元編碼總結

ascii 0 127 gb2312 0xa1a1 f7fe兩個位元組,是對ascii的補充,同時也把ascii中的字元編進 去,成全角字元。gbk 是對gb2312的一種補充,收錄的漢字範圍更大。gb2312標準共收錄6763個 漢字,其中一級漢字3755個,二級漢字3008個 gbk共收入218...

字元編碼總結

編碼字符集 表示某種編碼所涉及到字元的集合。例如ascii字符集 gb2312字符集。僅表示集合,集合元素 即字元 按照某種順序排放,並編上序號。如unicode。字元編碼 把字符集中的字元編碼為二進位制,用來表示字符集中的字元,是字符集的實現方式。如utf 8,utf 16,utf 32就是uni...