什麼是UNICODE

什麼是UNICODE?

  UNICODE使任何語言的字符都可以爲機器更容易的接受,UNICODE由 UC(UNICODE協會)管理並接受其技術上的修改。包括JAVA、LDAP、XML這樣的技術標準中均要求得到UNICODE的支持。UNICODE 的字符被成爲代碼點(CODE POINTS),用U後面加上XXXX來表示,其中,X爲16進制的字符。

對於英文來說,ascii碼 0-127就足以代碼所有字符,對於中文而言,則必須使用兩個字節(byte)來代表一個字符,具第一個字節必須大於127(所以我們有許程序判斷中文都是以ascii碼大於127作爲條件)。以上用兩個字節來表示一箇中文的方式,在習慣上稱爲雙字節(即DBCS: Double-Byte Character Set),而相對之下,英文的字符碼就稱爲單字節SBCS(Single-Byte Character Set)。

雖然雙字節(DBCS)足以解決中英文字符混合使用情況,但對於不同字符系統而言,必須經過字符碼轉換,非常麻煩。例如:中英文混合情況,日文,韓文等等。爲解決這個問題,國際標準組織於1984年4月成立ISO/IEC JTC1/SC2/WG2工作組。針對各國文字、符號進行統一性編碼。1991年美國跨國公司成立Unicode Consortium。並於1991年10月與WG2達成協議。採用同一編碼字集。目前Unicode是採用16位編碼體系。其字符集內容與 ISO10646的BMP(Basic Multilingual Plane)相同。Unicode於1992年6月通過DIS(Draf International Standard)。目前版本V2.0於1996公佈。內容包含符號6811個。漢字20902個。韓文拼音11172個。造字區6400個。保留 20249個。共計65534個。

隨着國際互聯網的迅速發展。要求進行數據交換的需求越來越大。不同的編碼體系越來越成爲信息交換的障礙。而且多種語言共存的文檔不斷增多。單靠代碼頁已很難解決這些問題。於是UNICODE應運而生。

UNICODE有雙重含義。首先UNICODE是對國際標準 ISO/IEC10646編碼的一種稱謂(ISO/IEC10646是一個國際標準。亦稱大字符集。它是ISO於1993年頒佈的一項重要國際標準。其宗旨是全球所有文種統一編碼)。另外它又是由美國的HP、Microsoft、IBM、Apple等大企業組成的聯盟集團的名稱。成立該集團的宗旨就是要推進多文種的統一編碼。

UNICODE同現在流行的代碼頁最顯著不同點在於:UNICODE是兩字節的全編碼。對於ASCII字符它也使用兩字節表示。代碼頁是通過高字節的取值範圍來確定是ASCII字符。還是漢字的高字節。如果發生數據損壞。某處內容破壞。則會引起其後漢字的混亂。UNICODE則一律使用兩個字節表示一個字符。最明顯的好處是它簡化了漢字的處理過程。

UNICODE使用平面來描述編碼空間。每個平面分爲256行。256列。相對於兩字節編碼的高低兩個字節。

UNICODE的第一個平面。稱爲Basic Multilingual Plane(基本多文種平面)。簡稱BMP。由於BMP僅用兩個字節表示。所以倍受青睞。

Unicode的最初目標。是用1個16位的編碼來爲超過65000字符提供映射。但這還不夠。它不能覆蓋全部歷史上的文字。也不能解決傳輸的問題(implantation head-ache's)。尤其在那些基於網絡的應用中。因此。Unicode用一些基本的保留字符制定了三套編碼方式。它們分別是UTF-8,UTF- 16和UTF-32。正如名字所示。在UTF-8中。字符是以8位序列來編碼的。用一個或幾個字節來表示一個字符。這種方式的最大好處。是UTF-8保留了ASCII字符的編碼做爲它的一部分。例如。在UTF-8和ASCII中。“A”的編碼都是0x41.UTF-16和UTF-32分別是Unicode 的16位和32位編碼方式。考慮到最初的目的。通常說的Unicode就是指UTF-16。

多年來。計算機普遍採用美國信息交換標準代碼(American Standard Code for Information Interchange,簡稱ASCII碼)來表示字符。這些字符可以是字母。數字。標點符號和控制符。用這種編碼來表示英文在內的字符不成問題的。但要表示其它語言文字如。阿拉伯文。中文。日文。維文。哈文…必須進行擴充。在1987年。Xerox Palo Alto研究中心的Joe Becker和Lee Collins。以及Apple公司的Mark Davis試圖研究一種適用於多文種處理的字符編碼。這種編碼很快就得到了許多大公司的支持。這些公司都派代表參加Unicode研究組。Unicode 的研究得到了較快的進展。由於Unicode集團的成員都是世界上的主要系統及軟件製造商。所以Unicode很快就成爲事實上的工業標準。

基於Unicode的系統允許使用65000個不同的字符。足以善蓋世界所有語言的所有字母。外加數千種符號。

其中。General Scripts區單獨收錄了19種語言文字。包括ASCII,Latin1,Greek,Cyrillic,Armenian,Hedrew, Arabic,Devanagari,Bengali ,Gurmukhi,Gujarati,Oriya,Tamil,Telugu,Kannada,Malayalam,Thai,Lao, Tibetan,Georgian等語言文字之外。還包括漢語。日語和朝鮮語中的所有大量字符。

Unicode是一種定長的2B多文種字符集編碼。它試圖善蓋現有的有關國家和地區的標準。包括GB2312,CNS11643,JIS 0208和KSC 5601等。Unicode可以表示混合文字資料。也可以保證以前的ISO 10646。

Unicode的特點是:

不管哪一國的字符碼均以兩個Byte表示,例如"A"在Unicode則是16進制 41和00的組合,即4100,高位41(轉換爲Ascii碼即是65=A),Windows NT/2000以Unicode來表示字符集,例如你可以看到MS SQL Server中產生的SQL文件可以選擇是以Unicode來保存還是以普通格式來保存,如果你以Unicode保存,則在95/98平臺許多軟件均無法正確讀出其格式。

同時你還可以注意到95/98中API定義,許多名稱結尾是有一個A的,例如

WriteProfileStringA

而在NT/2000操作系統中,提供了兩套API,另外一個命令是 WriteProfileStringW,以W 結尾的API只適用於NT / 2000。(在NT中使用以W結尾的API函數效率比A結尾的要快,因爲省去了Unicode和DBCS/SBCS的轉換過程)

這樣我們經常要用到的判斷字符串長度的函數,在NT和95/98下執行結果不同,如下:(下面代碼適合於VB, ASP)

95/98中:

len("abc中國") 返回 7 (因爲每個中文作爲兩個Ascii碼來看)

NT/2000中:

len("abc中國") 返回 5 (因爲每個字符都作爲一個Unicode來看) 

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