Unicode(統一碼、萬國碼、單一碼)


Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。1990年開始研發,1994年正式公布。隨着計算機工作能力的增強,Unicode也在面世以來的十多年里得到普及。

Unicode****的編碼和實現

大概來說,Unicode編碼系統可分為編碼方式和實現方式兩個層次。

1.編碼方式

Unicode的編碼方式與ISO10646的通用字元集(亦稱[通用字符集])(Universal Character Set,UCS)概念相對應,目前的用於實用的Unicode版本對應於UCS-2,使用16位的編碼空間,也就是每個字符占用2個字節

統一字符編碼標准是一種十六位的字符編碼標准,而ASCII則是七位編碼,只適用於英文。另有西歐國家所用的ISO Latin-1八位編碼。使用Unicode的好處就是用一個字符集就可解決所有現今世界上的可書寫語言。Unicode共有2^16即65536個編碼,其中有近39000種已被定義完成,而中國字就占了21000種 !

上述16位Unicode字符構成基本多文種平面(Basic Multilingual Plane,簡稱(BMP)。最新(但未實際廣泛使用)的Unicode版本定義了16個輔助平面,兩者合起來至少需要占據21位的編碼空間,比3字節略少。但事實上輔助平面字符仍然占用4字節編碼空間,與UCS-4保持一致。未來版本會擴充到ISO10646-1實現級別3,即涵蓋UCS-4的所有字符。UCS-4是一個更大的尚未填充完全的31位字符集,加上恆為0的首位,共需占據32位,即4字節。理論上最多能表示2^31個字符,完全可以涵蓋一切語言所用的符號。

BMP字符的Unicode編碼表示為U+hhhh,其中每個h代表一個十六進制數位。與UCS-2編碼完全相同。對應的4字節UCS-4編碼后兩個字節一致,前兩個字節的所有位均為0。

2.實現方式

Unicode的實現方式不同於編碼方式。一個字符的Unicode編碼是確定的。但是在實際傳輸過程中,由於不同系統平台的設計不一定一致,以及出於節省空間的目的,對Unicode編碼的實現方式有所不同。Unicode的實現方式稱為Unicode轉換格式(Unicode Translation Format,簡稱為UTF)。

再如,如果直接使用與 Unicode 編碼一致(僅限於 BMP 字符)的 UTF-16 編碼,由於每個字符占用了兩個字節,在Macintosh (Mac)機和PC機上,對字節順序的理解是不一致的。這時同一字節流可能會被解釋為不同內容,如某字符為十六進制編碼4E59,按兩個字節拆分為4E和59,在Mac上讀取時是從低字節開始,那么在Mac OS會認為此4E59編碼為594E,找到的字符為“奎”,而在Windows上從高字節開始讀取,則編碼為 U+4E59 的字符為“乙”。就是說在Windows下以UTF-16編碼保存一個字符“乙”,在Mac OS里打開會顯示成“奎”。此類情況說明UTF-16的編碼順序若不加以人為定義就可能發生混淆,於是在 UTF-16 編碼實現方式中使用了大尾序(Big-Endian, 簡寫為UTF-16 BE)、小尾序(Little-Endian, 簡寫為UTF-16 LE)的概念,以及可附加的BOM(Byte Order Mark)解決方案,目前在PC機上的Windows系統和Linux系統對於UTF-16編碼默認使用UTF-16 LE。(具體方案參見UTF-16)

此外Unicode的實現方式還包括UTF-7、Puny code、CESU-8、SCSU、UTF-32等,這些實現方式有些僅在一定的國家和地區使用,有些則屬於未來的規划方式。目前通用的實現方式是UTF-16小尾序(BOM)、UTF-16大尾序(BOM)和UTF-8。在微軟公司Windows XP操作系統附帶的記事本中,“另存為”對話框可以選擇的四種編碼方式除去非Unicode編碼的ANSI外,其余三種“Unicode”、“Unicode Big Endian”和“UTF-8”即分別對應這三種實現方式。

目前輔助平面的工作主要集中在第二和第三平面的中日韓統一表意文字中,因此包括GBK、GB18030、Big5等簡體中文、正體中文、日文、韓語以及越南字符的各種編碼與Unicode的協調性被重點關注。考慮到Unicode最終要涵蓋所有的字符,從某種意義而言,這些編碼方式也可視作Unicode的出現於其之前的既成事實的實現方式,如同ASCII及其擴展Latin-1一樣,后兩者的字符在16位Unicode編碼空間中的編碼第一字節各位全為0,第二字節編碼與原編碼完全一致。但上述東亞語言編碼與Unicode編碼的對應關系要復雜得多。

非Unicode環境

在非Unicode環境下,由於不同國家和地區采用的字符集不一致,很可能出現無法正常顯示所有字符的情況。微軟公司使用了代碼頁(Code page)轉換表的技術來過渡性地部分解決這一問題,即通過指定的轉換表將非Unicode的字符編碼轉換為同一字符對應的系統內部使用的Unicode編碼。可以在“語言與區域設置”中選擇一個代碼頁作為非Unicode編碼所采用的默認編碼方式,如936為簡體中文GBK,950為正體中文Big5(皆指PC上使用的)。在這種情況下,一些非英語的歐洲語言編寫的軟件和文檔很可能出現亂碼。而將代碼頁設置為相應語言中文處理又會出現問題,這一情況無法避免。從根本上說,完全采用統一編碼才是解決之道,但目前上無法做到這一點。

代碼頁技術現在廣泛為各種平台所采用。UTF-7的代碼頁是65000,UTF-8的代碼頁是65001。

XML****和Unicode

XML及其子集HTML采用UTF-8作為標准字集,理論上我們可以在各種支持XML標准的瀏覽器上顯示任何地區文字的網頁,只要電腦本身安裝有合適的字體即可。可以利用&#nnn;的格式顯示特定的字符。nnn代表該字符的十進制Unicode代碼。如果采用十六進制代碼,在編碼之前加上x字符即可。但部分舊版本的瀏覽器可能無法識別十六進制代碼。

然而部分由於Unicode版本發展原因,很多瀏覽器只能顯示UCS-2完整字符集也即現在使用的Unicode版本中的一個小子集。

輸入Unicode

除了輸入法外,操作系統會提供幾種方法輸入Unicode。像是Windows2000之后的Windows系統就提供一個可點擊的表。例如在Microsoft Word之下,按下Alt鍵不放,輸入0和某個字符的Unicode編碼(十進制),再松開Alt鍵即可得到該字符,如Alt+033865會得到Unicode字符葉。另外按Alt+X組合鍵,MSWord也會將光標前面的字符同其十六進制的四位Unicode編碼進行互相轉換。

Unicode目前已經有5.0版本。世界上有一大批計算機、語言學等科學家專門研究Unicode,到了現在Unicode標准已經不單是一個編碼標准,還是記錄人類語言文字資料的一個巨大的數據庫,同時從事人類文化遺產的發掘和保護工作。

對於中文而言,Unicode16編碼里面已經包含了GB18030里面的所有漢字(27484個字),目前Unicode標准准備把康熙字典的所有漢字放入到Unicode32bit編碼中。

UTF-8

UTF-8(8 位元 Universal Character Set/Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼。它可以用來表示Unicode標准中的任何字符,且其編碼中的第一個字節仍與ASCII相容,這使得原來處理ASCII字符的軟件無需或只需做少部份修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他儲存或傳送文字的應用中,優先采用的編碼。

UTF-8使用一至四個字節為每個字符編碼:

128個US-ASCII字符只需一個字節編碼(Unicode范圍由U+0000至U+007F)。

帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要二個字節編碼(Unicode范圍由U+0080至U+07FF)。

其他基本多文種平面(BMP)中的字符(這包含了大部分常用字)使用三個字節編碼。

其他極少使用的Unicode輔助平面的字符使用四字節編碼。

對上述提及的第四種字符而言,UTF-8使用四個字節來編碼似乎太耗費資源了。但UTF-8對所有常用的字符都可以用三個字節表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字符同樣需要四個字節來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字符的分布范圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的差異就變得微不足道了。因為傳統壓縮算法在壓縮較短文字時的效果不大,可以考慮使用Standard Compression Scheme For Unicode(SCSU)。

Unicode字符的位元被分割為幾部分,並分配到UTF-8的字節串中較低的位元的位置。在U+0080的以下字符都使用內含其字符的單字節編碼。這些編碼正好對應7位元的ASCII字符。在其他情況,有可能需要多達4個字符組來表示一個字符。這些多字節的最高有效位元會設定成1,以防止與7位元的ASCII字符混淆,並保持標准的字節主導字串(standard byte-oriented string)運作順利。


免責聲明!

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



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