1. 程式人生 > >Windows程式設計中Unicode的認識

Windows程式設計中Unicode的認識

 什麼是Unicode?

       簡單來說,Unicode是ASCLL字元編碼的一個擴充套件。那什麼是ASCLL?,並且為什麼要引用Unicode呢?用ASCLL字元編碼的優點和缺點又是什麼呢?Unicode又是以何種方式擴充套件ASCLL字元編碼。下面的表述將一步一步解決這些問題。

什麼是ASCLL字元編碼?

     美國資訊交換標準碼(ASCLL:American Standard Code for Information Interchange)起始於50年代後期。開發ASCLL的過程中,由於價格原因,採用了7bit標準的程式碼字符集。最終程式碼就有26個大寫字母、26個小寫字母、10個數字、32個符號、32個控制程式碼、1個空格,總共128個程式碼。

ASCLL優點:26個字母程式碼是連續的,大寫字母和小寫字母可以通過改變一位資料而相互轉換;10個數字也能直接轉換;

ASCLL的問題:ASCLL是一個真正的美國標準,故而不能滿足許多非英語國家的需求。那麼此時就需要對ASCLL進行擴充套件,

例如:1967年ISO推出的ASCLL的變種、程式碼0x40、0x5B、0x5C、0x5D、 0x7B、0x7C、0x7D 為國家使用保留

這顯然不是一個最佳的國際解決方案,但這並不能保證一致性。

擴充套件ASCLL

     在小型機開發初期,就嚴格建立了8位位元組。因此,如果使用一個位元組儲存字元,則可以由128個的字元表示ASCLL,那麼還有多出來的128位用來表示其他需要的字元,這256字元被寫入rom中。基於這種方式推出的ANSI字符集。

雙位元組字符集

     迄今為止,我們已經看到256個字元的字符集。但中國、日本、韓國的象形文字元號高達21000個。如何容納這些字元並保持ASCLL的相容性呢?解決方案就是雙位元組字符集(DBCS:double byte character set)。DBCS從256程式碼開始,就像ASCII一樣。與任何行為良好的內碼錶一樣,最初的128個程式碼是ASCII。然而,較高的128個程式碼中的某些總是跟隨著第二個位元組。這兩個位元組一起(稱作首位位元組和跟隨位位元組)定義一個字元,通常是一個複雜的象形文字。看看細節是如何的:

     ASCII不是空出來了高128個碼位嗎?第一個byte在這高128裡取值,再和第二個byte結合就可以表示最多128x256=32768個字元了。程式在處理字串的時候,遇到有byte<128的就認為是ASCII,遇到>=128的就把下一個byte也讀進來,換算成一個字元。

Unicode

    我們所面臨的問題:世界上的書寫語言不能僅用8位的程式碼表示。以前的解決方案包括ANSI、雙位元組字符集都不能滿足需求。什麼是真正的解決方案呢?根據日常編碼的經驗,如果8位不能滿足我們的需求那麼便增加位數使其擴增,這是再直接和自然不過的方法了,這也是非常簡單的Unicode的原理,Unicode用16位表示字元,與上述方案不同,Unicode可直接表示65536個字元。這對錶示世界上的大多數字符是十分充裕的。