C語言Windows程序設計->第二天->ASCII與Unicode


ASCII與Unicode

=========

一、ASC

1>. 關於ASC

  ASCIIAmerican Standard Code for Information Interchange,美國信息互換標准代碼)

  ASCII一共包含128個字符包括: 33個控制符號, 1個空格, 32個符號, 10個數字, 26個小寫字母和26個大寫字母。每個ASCII字符采用7位二進制編碼的方式。

   ASCII的優點:

    十分可靠普遍扎根在我們的鍵盤、顯示器、系統硬件、打印機、操作系統等用途十分廣泛。

   ASCII的缺點:

    ASCII, 美國信息互換標准代碼, 美國原生不能滿足其他國家文字的需求例如中國的漢字?英國的英鎊符號(£)?等, 這些在ASCII都是找不到的。

 

2>. ASCII的擴展

  由於ASCII不能很好的滿足其他國家文字的需求, 所以人們迫切希望能對ASCII進行改進。

 

  國際化標准組織的擴展方案

     1967國際化標准組織( ISO, International Organization for Standardization )推薦了ASCII的一個變種, 改動內容包括ASCII中, 拿出 0x40('@'),0x5B('[')0x5C('\')0x5D(']')0x5E('^')0x60(' ' ')0x7B('{')0x7C('¦')0x7D('}')0x7E('~')10個符號保留給各個國家單獨使用。這顯然不是解決ASCII國際化的好方法首先其他國家將這些保留字符重新定義為自己國家需要的字符后那么國際上的一致性將不能得到保證此外, 10個保留字符遠遠不能滿足美國的東方的一些國家使用的象形文字需求比如我們中國的漢字。

 

  . IBM公司的擴展方案

     IBM公司采用了使用8位二進制編碼方式來表示ASCII, 使用一個字節來儲存字符這樣相對於7位的ASCII就可以多出128個額外字符空位來補充ASCII。

 

     IBMASCII的主要擴展為: 補充了一些重音字符、小寫希臘字母、塊圖字符和線圖字符。同時還將一些補充的字符分配到ASCII的一些不必要的控制字符上。

 

     (在操作系統還是字符模式的年代塊圖字符和線圖字符常用來被應用軟件裝飾自己的程序顯示)

 

  微軟公司的擴展方案

     198511, Windows 1.0發布微軟采用了自己定義的一套字符集這套字符集被稱為"ANSI字符集", 是基於ANSIISO標准的一個草案。

 

     在MS-DOS 3.3時代(19874), 微軟為了使不同國家的計算機都能正常的顯示字符微軟采用了代碼頁概念不同國家的字符被規定在不同的代碼頁上例如代碼頁第437頁為美國英語, 850頁為拉丁語-1。用戶只要將代碼頁設置到自己所在的國家就能正常的進行工作但是如果用戶嘗試着將自己的文檔拿到與另外一個使用不同代碼頁的用戶的計算機上進行修改時自己的文檔的某些字符將會顯示成其他字符這還算好有解決方案應用軟件可以通過將代碼頁信息儲存到文件中使用時再進行一些代碼頁的轉換。

 

     但在后來隨着代碼頁數量的劇增, Windows版本的不斷升級代碼頁的混淆問題開始日益凸顯, DS-DOS的代碼頁和Windows的代碼頁以及其他Windows版本的系統發生了不兼容例如MS-DOS代碼頁第855西里爾語在Windows中的1251頁西里爾語或者Macintosh的第10007頁西里爾語還都不一樣。

 

     微軟為了解決東方一些國家使用的象形文字問題使用了雙字節字符集這些字符集同樣在不同的代碼頁代碼頁936(簡體中文)949(韓文)950(繁體中文)以及932(日文)。微軟的這個雙字節字符集和你象形的可能有所不同在這個雙字節字符集中128個字符仍然是ASCII(1字節), 較高的128個擴展字符以跟隨第二個字節的方式用來表示象形文字(這兩個字節被稱為前導字節和尾隨字節)

     所以在這個代碼頁中有一個字節的字符還有2個字節的字符這就導致了兩個嚴重的問題:

       1>. 在一段字符串中字符串的長度不能根據字節的個數確定要想確定字符串的長度必須檢查每個字節是不是雙字節字符的前導字節。

       2>. 通過任意指向字符串中的一個指針無法知道前一個字符的地址通常要回到字符串的開始一直解析到指針所在的位置。

 

二、Unicode

  對ASCII擴展的過程中, 沒有能夠找到一個徹底解決世界上所有書面文字的表示方法很顯然, 1個字節, 256個字符是無法表示世界上所有的書面文字的因此, Unicode誕生了。

 

  Unicode使用16(2字節)的二進制編碼方式來表示字符我們知道, 16位最多能夠表示65536個字符, 65536個字符對於世界上的所有書面文字以及一些特殊符號來說已經足夠用了。在Unicode不同國家使用不同的代碼段例如, 0x0530 - 0x058F為亞美尼亞語 (Armenian) 、0x0600 - 0x06FF為阿拉伯文 (Arabic) 、0x0E00 - 0x0E7F為泰文 (Thai) 、0x2700 - 0x27BF為印刷符號 (Dingbats) 、0x4E00 - 0x9FBF為中文。

 

  Unicode的優點:

    只有一個字符集避免了二義性能夠滿足跨語言、跨平台進行文本轉換、處理的要求。

  Unicode的缺點:

    Unicode字符的字符串比ASCII字符串占用的內存大兩倍。(筆者認為隨着計算機性能的不斷提高內存和外存容量的不斷增加, Unicode這一缺點可以慢慢忽略)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM