計算機語言的巴別塔 ANSI Unicode編碼

2021-07-08 19:37:38 字數 4034 閱讀 2546

1.asc ii

ascii(american standard code for information interchange,美國標準資訊交換**)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統。ascii 碼使用指定的7 位或8 位二進位制數組合來表示128 或256 種可能的字元。後128個稱為擴充套件ascii碼。許多基於x86的系統都支援使用擴充套件(或「高」)ascii。擴充套件ascii 碼允許將每個字元的第8 位用於確定附加的128 個特殊符號字元、外來語字母和圖形符號。

2.ansi

ansi是一種字元**,為使計算機支援更多語言,通常使用 0x80~0xff 範圍的 2 個位元組來表示 1 個字元。在簡體中文windows作業系統中,ansi 編碼代表 gbk 編碼;在正體中文windows作業系統中,ansi編碼代表big5。

3.gb2312 gbk gb18030

gb2312

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

gbk兩個位元組表示乙個漢字,英文佔乙個位元組,即全形半形。不再要求低位元組一定是127號之後的內碼,只要第乙個位元組是大於127就固定表示這是乙個漢字的開始,不管後面跟的是不是擴充套件字符集裡的內容。結果擴充套件之後的編碼方案被稱為 gbk 標準,gbk 包括了 gb2312 的所有內容,同時又增加了近20000個新的漢字。

gb18030

gb18030 編碼是一二四位元組變長編碼。gb 18030與gb 2312-1980完全相容,與gbk基本相容,支援gb 13000及unicode的全部統一漢字,共收錄漢字70244個。單位元組,其值從0到0x7f,與 ascii 編碼相容。雙位元組,第乙個位元組的值從0x81到0xfe,第二個位元組的值從0x40到0xfe(不包括0x7f),與 gbk標準基本相容。四位元組,第乙個位元組的值從0x81到0xfe,第二個位元組的值從0x30到0x39,第三個位元組從0x81到0xfe,第四個位元組從0x30到0x39。

4.unicode

unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言、跨平台進行文字轉換、處理的要求。

固定用兩個位元組來表示,其中英文高位元組補0

5.utf-8

utf-8以位元組為單位對unicode進行編碼,utf-8是unicode的實現方式之一。

utf8就是每次8個位傳輸資料,而utf16就是每次16個位,只不過為了傳輸時的可靠性,從unicode到utf時並不是直接的對應,而是要過一些演算法和規則來轉換。

tf-8最大的乙個特點,就是它是一種變長的編碼方式。它可以使用1~4個位元組表示乙個符號,根據不同的符號而變化位元組長度。

utf-8的編碼規則很簡單,只有二條:

1)對於單位元組的符號,位元組的第一位設為0,後面7位為這個符號的unicode碼。因此對於英語字母,utf-8編碼和ascii碼是相同的。

2)對於n位元組的符號(n>1),第乙個位元組的前n位都設為1,第n+1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進位制位,全部為這個符號的unicode碼。

下表總結了編碼規則,字母x表示可用編碼的位。

unicode編碼(十六進製制)   utf-8 位元組流(二進位制)

00000000 - 0000007f0******x

00000080 - 000007ff110***xx 10******

00000800 - 0000ffff1110***x 10****** 10******

00010000 - 001fffff11110*** 10****** 10****** 10******

utf-8編碼的最大長度是6個位元組。從上表可以看出,6位元組模板有31個x,即可以容納31位二進位制數字。unicode的最大碼位0x7fffffff也只有31位。

「漢」字的unicode編碼是0x6c49。0x6c49在0x0800-0xffff之間,使用用3位元組模板了:1110***x 10****** 10******。將0x6c49寫成二進位制是:0110 1100 0100 1001, 用這個位元流依次代替模板中的x,得到:11100110 10110001 10001001,即e6 b1 89。

6.little endian和big endian

unicode編碼儲存時,第乙個位元組在前,就是」大頭方式「(big endian),第二個位元組在前就是」小頭方式「(little endian)。unicode規範中定義,每乙個檔案的最前面分別加入乙個表示編碼順序的字元,這個字元的名字叫做」零寬度非換行空格「(zero width no-break space),用feff表示。這正好是兩個位元組,而且ff比fe大1。如果乙個文字檔案的頭兩個位元組是fe ff,就表示該檔案採用大頭方式;如果頭兩個位元組是ff fe,就表示該檔案採用小頭方式。

7.例項

新建乙個文字檔案,內容就是乙個」漢「字,依次採用ansi,unicode,unicode big endian 和 utf-8編碼方式儲存。

然後,用文字編輯軟體ultraedit中的」十六進製制功能「(ctrl + h),觀察該檔案的內部編碼方式。

1)ansi:檔案的編碼就是兩個位元組「ba ba」,這正是「漢」的gb2312編碼,這也暗示gb2312是採用大頭方式儲存的。

2)unicode:編碼是四個位元組「ff fe 49 6c」,其中「ff fe」表明是小頭方式儲存,真正的編碼是6c 49。

3)unicode big endian:編碼是四個位元組「ef ff 6c 49」,其中「fe ff」表明是大頭方式儲存。

4)utf-8:編碼是六個位元組「ef bb bfe6 b1 89」,前三個位元組「e6 b1 89」表示這是utf-8編碼,後三個「e6 b1 89」就是「漢」的具體編碼,它的儲存順序與編碼順序是一致的。

再在"漢"字後面加上乙個英文本母a,a的asc ii碼為61h,依次採用ansi,unicode,unicode big endian 和 utf-8編碼方式儲存。

1)ansi:檔案的編碼就是兩個位元組「ba ba 61」,這正是「漢」的gb2312編碼,這也暗示gb2312是採用大頭方式儲存的。

2)unicode:編碼是四個位元組「ff fe 49 6c 61 00」,其中「ff fe」表明是小頭方式儲存,真正的編碼是6c 49。

3)unicode big endian:編碼是四個位元組「ef ff 6c 49 00 61」,其中「fe ff」表明是大頭方式儲存。

4)utf-8:編碼是六個位元組「ef bb bf e6 b1 89 61」,前三個位元組「e6 b1 89 61」表示這是utf-8編碼,utf-8是一種變長的編碼方式,所以c的asc ii碼為61h,高位元組不再補0。

再在『a』的後面加上±,其擴充套件asc ii碼為f1,依次採用ansi,unicode,unicode big endian 和 utf-8編碼方式儲存。

1)ansi:檔案的編碼就是兩個位元組「ba ba 61 a1 c0」,這正是「漢」的gb2312編碼,這也暗示gb2312是採用大頭方式儲存的。

2)unicode:編碼是四個位元組「ff fe 49 6c 61 00 b1 00」,其中「ff fe」表明是小頭方式儲存.

3)unicode big endian:編碼是四個位元組「ef ff 6c 49 00 61 00 b1」,其中「fe ff」表明是大頭方式儲存。

4)utf-8:編碼是六個位元組「ef bb bf e6 b1 89 61 c2 b1」,前三個位元組「e6 b1 89 61」表示這是utf-8編碼.

所以,根據結果來看,gbk unicode utf-8不再相容擴充套件asc ii碼,另根據其unicode編碼為』00 b1『 即:『1011 0001』

將其轉化為utf-8,根據其屬於

00000080 - 000007ff110***xx 10****** 故將其自右向左一次填滿,不足補0,即為『1100 0010 1011 0001』轉化為16進製制就是:『c2 b1『就是它的utf-8碼

參考:

計算機語言

早期的程式設計均使用機器語言。程式設計師們將用0,1數字編成的程式 打在紙帶或卡片上,1打孔,0不打孔,再將程式通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構成,十分複雜,不方便閱讀和修改,也容易產生錯誤。程式設計師們很快就發現了使用機器語言帶來的麻煩,它們難於辨別和記憶,給...

計算機語言

計算機語言 計算機語言 也稱為程式語言 是用來書寫程式的語言 是人命令計算機完成工作 的工具。每一種語言都規定了一組有確定含義的符號和一組規則。根據規則構成的符號串 的總體就是語言。計算機語言分為機器語言 組合語言 高階語言和 語言。機器語言是機器指令的集合。直接採用機器語言來書寫程式是一件非常繁瑣...

計算機語言

用二進位制 0和1描述的指令 低階語言 優點 速度最快 缺點 最複雜,開發效率最低。組合語言的實質和機器語言是相同的,都是直接對硬體操作吧指令換成了英文縮寫。優點 速度最快 缺點 最複雜,開發效率最低。高階語言在開發效率上大大提高 高階語言編制的程式不能直接被計算機識別,必須經過轉換才能被執行。優點...