VC++的Unicode編程

來源:互聯網
上載者:User

一、什麼是Unicode

先從ASCII說起,ASCII是用來表示英文字元的一種編碼規範。每個ASCII字元佔用1個位元組,因此,ASCII編碼可以表示的最大字元數是255(00H—FFH)。其實,英文字元並沒有那麼多,一般只用前128個(00H—7FH,最高位為0),其中包括了控制字元、數字、大小寫字母和其它一些符號。而最高位為1的另128個字元(80H—FFH)被稱為“擴充ASCII”,一般用來存放英文的定位字元、部分音標字元等等的一些其它符號。

這種字元編碼規則顯然用來處理英文沒有什麼問題。但是面對中文、阿拉伯文等複雜的文字,255個字元顯然不夠用。

於是,各個國家紛紛制定了自己的文字編碼規範,其中中文的文字編碼規範叫做“GB2312—80”,它是和ASCII相容的一種編碼規範,其實就是利用擴充ASCII沒有真正標準化這一點,把一個中文字元用兩個擴充ASCII字元來表示,以區分ASCII碼部分。

但是這個方法有問題,最大的問題就是中文的文字編碼和擴充ASCII碼有重疊。而很多軟體利用擴充ASCII碼的英文定位字元來畫表格,這樣的軟體用到中文系統中,這些表格就會被誤認作中文字元,出現亂碼。

另外,由於各國和各地區都有自己的文字編碼規則,它們互相衝突,這給各國和各地區交換資訊帶來了很大的麻煩。

要真正解決這個問題,不能從擴充ASCII的角度入手,而必須有一個全新的編碼系統,這個系統要可以將中文、法文、德文……等等所有的文字統一起來考慮,為每一個文字都分配一個單獨的編碼。

於是,Unicode誕生了。

Unicode也是一種字元編碼方法,它佔用兩個位元組(0000H—FFFFH),容納65536個字元,這完全可以容納全世界所有語言文字的編碼。

在Unicode裡,所有的字元被一視同仁,漢字不再使用“兩個擴充ASCII”,而是使用“1個Unicode”,也就是說,所有的文字都按一個字元來處理,它們都有一個唯一的Unicode碼。

二、使用Unicode編碼的好處

使用Unicode編碼可以使您的工程同時支援多種語言,使您的工程國際化。

另外,Windows NT是使用Unicode進行開發的,整個系統都是基於Unicode的。如果調用一個API函數並給它傳遞一個ANSI(ASCII字元集以及由此派生併兼容的字元集,如:GB2312,通常稱為ANSI字元集)字串,那麼系統首先要將字串轉換成Unicode,然後將Unicode字串傳遞給作業系統。如果希望函數返回ANSI字串,系統就會首先將Unicode字串轉換成ANSI字串,然後將結果返回給您的應用程式。進行這些字串的轉換需要佔用系統的時間和記憶體。如果用Unicode來開發應用程式,就能夠使您的應用程式更加有效地運行。

下面例舉幾個字元的編碼以簡單示範ANSI和Unicode的區別:

字元 A N
ANSI碼 41H 4eH cdbaH
Unicode碼 0041H 004eH 548cH

三、使用C++進行Unicode編程

對寬字元的支援其實是ANSI C標準的一部分,用以支援多位元組表示一個字元。寬字元和Unicode並不完全等同,Unicode只是寬字元的一種編碼方式。

1、寬字元的定義

在ANSI中,一個字元(char)的長度為一個位元組(Byte)。使用Unicode時,一個字元佔據一個字,C++在wchar.h標頭檔中定義了最基本的寬字元類型wchar_t:

typedef unsigned short wchar_t;

從這裡我們可以清楚地看到,所謂的寬字元就是無符號短整數。

2、常量寬字元串

對C++程式員而言,構造字串常量是一項經常性的工作。那麼,如何構造寬字元字串常量呢?很簡單,只要在字串常量前加上一個大寫的L就可以了,比如:

wchar_t *str1=L" Hello";

這個L非常重要,只有帶上它,編譯器才知道你要將字串存成一個字元一個字。還要注意,在L和字串之間不能有空格。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.