編碼方式

 

ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標準ISO/IEC 646。

ASCII 碼使用指定的7 位或8 位二進制數組合來表示128 或256 種可能的字符。標準ASCII 碼也叫基礎ASCII碼,使用7 位二進制數來表示所有的大寫和小寫字母,數字0 到9、標點符號, 以及在美式英語中使用的特殊控制字符。其中:
  0~31及127(共33個)是控制字符或通信專用字符(其餘爲可顯示字符),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(振鈴)等;通信專用字符:SOH(文頭)、EOT(文尾)、ACK(確認)等;ASCII值爲8、9、10 和13 分別轉換爲退格、製表、換行和回車字符。它們並沒有特定的圖形顯示,但會依不同的應用程序,而對文本顯示有不同的影響。
  32~126(共95個)是字符(32sp是空格),其中48~57爲0到9十個阿拉伯數字
  65~90爲26個大寫英文字母,97~122號爲26個小寫英文字母,其餘爲一些標點符號、運算符號等。
  同時還要注意,在標準ASCII中,其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個字節中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規定:正確的代碼一個字節中1的個數必須是偶數,若非偶數,則在最高位b7添1。

  後128個稱爲擴展ASCII碼,目前許多基於x86的系統都支持使用擴展(或“高”)ASCII。擴展ASCII 碼允許將每個字符的第8 位用於確定附加的128 個特殊符號字符、外來語字母和圖形符號。

擴展ASCII 字符是從128 到255(0x7f-0xff)的字符。

漢字編碼  0-127 是 7位ASCII 碼的範圍,是國際標準。
  至於漢字,不同的字符集用的ascii 碼的範圍也不一樣,常用的漢字字符集有GB2312-80,GBK,
  Big5,unicode 等。下面我重點說一說最常用的GB_2312 的字符集。
  GB_2312 字符集是目前最常用的漢字編碼標準,windows 95/98/2000 中使用的 GBK字符集 就包含了GB2312,或者說和GB2312 兼容,GB_2312 字符集包含了 6763個的 簡體漢字,和682 個標準中文符號。在這個標準中,每個漢字用2個字節來表示,每個字節的ascii碼爲 161-254 (16 進制A1 - FE),第一個字節 對應於 區碼的1-94 區,第二個字節 對應於位碼的1-94 位。
  161-254 其實很好記憶,大家知道英文字符中,可打印的字符範圍爲33-126。將 這對 數加上

  128(或者說最高位置1),就得到漢字使用的字符的範圍。

Windows系統自帶的記事本,在存儲的時候可以選擇4種編碼方式,它們分別是:ANSI、Unicode、Unicode big endian、UTF-8,那麼他們之間有什麼區別呢?

一、ANSI
注意這裏的ANSI編碼,並非ASCII編碼,雖然它確實有點迷惑人。在簡體中文系統下,ANSI編碼代表的就是GB2312編碼。對於一個ANSI文本,英文部分使用的就是ASCII編碼,而中文部分使用的就是GB2312編碼。
二、Unicode
Unicode是用2個字節表示全世界的符號,只要選擇Unicode編碼,所有的字符都會使用2個字節進行存儲,英文字符也不例外,說到Unicode編碼,一般默認指的是UTF-16/UCS-2, little endian這種實現。
三、Unicode big endian
Unicode big endian也是Unicode,只不過是另一種實現:UTF-16/UCS-2, big endian。
四、UTF-8
UTF-8也是一種Unicode實現,因爲Unicode是對全世界的所有符號進行了獨立的編碼,也就是獨一無二的,這個編碼與實現無關,UTF-8只是在這種獨立的編碼上面進行了重新的編碼,它是一種變長的格式,根據不同的編碼,字符可能佔用1~4個字節。比如ASCII字符佔用1個字節,而漢字一般都佔用3個字節。
下面讓我們做個實驗,假如我們使用這樣一段文本,既包含英文字符又包含漢字,將其以上面的三種編碼格式分別保存爲1.txt、2.txt、3.txt、4.txt四個文件,然後使用UltraEdit以16進制形式打開,做一個比較對照。文本如下:
然後分別如上保存爲4個文件。首先要對UltraEdit做一個設置,因爲UltraEdit自動會對UTF-8文件識別,並且在讀取的過程中將其轉換爲UTF-16/UCS-2, little endian,如果不做設置我們就無法真正的看到UTF-8文件了。設置如下,選擇菜單欄的『高級』選項,進入『配置...』,跳出如下設置窗口:
就在常規標籤頁裏面,我們將“自動檢測UTF-8格式文件”前面的選中去掉,確認即可,這樣UltraEdit就不會默認轉換UTF-8文件了。
現在我們分別將4個文件用16進制形式打開。
1.txt(ANSI):
英文1個字節,漢字2個字節GB2312編碼。
2.txt(Unicode):
我們看到Unicode是有前導符FF FE(位由低到高)的,每個字符都佔有2個字節。
3.txt(Unicode big endian):
這種編碼方式只是將高字節和低字節顛倒了一個位置,其它不變,每個字符仍然是佔用2個字節,前導符爲FE FF(位由低到高)。
4.txt(UTF-8):
可以看到UTF-8是使用的變長格式,英文字符佔用的1個字節,例子裏面的漢字都是佔用3個字節,平均下來反而比上面兩個要短點,UTF-8使用的前導符是EF BB BF(位由低到高)。
大家心裏面些許應該有點清楚了吧。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章