VC++的Unicode編程

VC++的Unicode編程

ID:37713448

大?。?25.47 KB

頁數(shù):8頁

時(shí)間:2019-05-29

VC++的Unicode編程_第1頁
VC++的Unicode編程_第2頁
VC++的Unicode編程_第3頁
VC++的Unicode編程_第4頁
VC++的Unicode編程_第5頁
資源描述:

《VC++的Unicode編程》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、VC++的Unicode編程一、什么是Unicode先從ASCII說起,ASCII是用來表示英文字符的一種編碼規(guī)范。每個(gè)ASCII字符占用1個(gè)字節(jié),因此,ASCII編碼可以表示的最大字符數(shù)是255(00H—FFH)。其實(shí),英文字符并沒有那么多,一般只用前128個(gè)(00H—7FH,最高位為0),其中包括了控制字符、數(shù)字、大小寫字母和其它一些符號。而最高位為1的另128個(gè)字符(80H—FFH)被稱為“擴(kuò)展ASCII”,一般用來存放英文的制表符、部分音標(biāo)字符等等的一些其它符號?! ∵@種字符編碼規(guī)則顯然用來

2、處理英文沒有什么問題。但是面對中文、阿拉伯文等復(fù)雜的文字,255個(gè)字符顯然不夠用。于是,各個(gè)國家紛紛制定了自己的文字編碼規(guī)范,其中中文的文字編碼規(guī)范叫做“GB2312—80”,它是和ASCII兼容的一種編碼規(guī)范,其實(shí)就是利用擴(kuò)展ASCII沒有真正標(biāo)準(zhǔn)化這一點(diǎn),把一個(gè)中文字符用兩個(gè)擴(kuò)展ASCII字符來表示,以區(qū)分ASCII碼部分。  但是這個(gè)方法有問題,最大的問題就是中文的文字編碼和擴(kuò)展ASCII碼有重疊。而很多軟件利用擴(kuò)展ASCII碼的英文制表符來畫表格,這樣的軟件用到中文系統(tǒng)中,這些表格就會被誤認(rèn)

3、作中文字符,出現(xiàn)亂碼?! ×硗猓捎诟鲊透鞯貐^(qū)都有自己的文字編碼規(guī)則,它們互相沖突,這給各國和各地區(qū)交換信息帶來了很大的麻煩。要真正解決這個(gè)問題,不能從擴(kuò)展ASCII的角度入手,而必須有一個(gè)全新的編碼系統(tǒng),這個(gè)系統(tǒng)要可以將中文、法文、德文……等等所有的文字統(tǒng)一起來考慮,為每一個(gè)文字都分配一個(gè)單獨(dú)的編碼。于是,Unicode誕生了。Unicode也是一種字符編碼方法,它占用兩個(gè)字節(jié)(0000H—FFFFH),容納65536個(gè)字符,這完全可以容納全世界所有語言文字的編碼。在Unicode里,所有的字符

4、被一視同仁,漢字不再使用“兩個(gè)擴(kuò)展ASCII”,而是使用“1個(gè)Unicode”,也就是說,所有的文字都按一個(gè)字符來處理,它們都有一個(gè)唯一的Unicode碼。二、使用Unicode編碼的好處使用Unicode編碼可以使您的工程同時(shí)支持多種語言,使您的工程國際化。  另外,WindowsNT是使用Unicode進(jìn)行開發(fā)的,整個(gè)系統(tǒng)都是基于Unicode的。如果調(diào)用一個(gè)API函數(shù)并給它傳遞一個(gè)ANSI(ASCII字符集以及由此派生并兼容的字符集,如:GB2312,通常稱為ANSI字符集)字符串,那么系統(tǒng)首

5、先要將字符串轉(zhuǎn)換成Unicode,然后將Unicode字符串傳遞給操作系統(tǒng)。如果希望函數(shù)返回ANSI字符串,系統(tǒng)就會首先將Unicode字符串轉(zhuǎn)換成ANSI字符串,然后將結(jié)果返回給您的應(yīng)用程序。進(jìn)行這些字符串的轉(zhuǎn)換需要占用系統(tǒng)的時(shí)間和內(nèi)存。如果用Unicode來開發(fā)應(yīng)用程序,就能夠使您的應(yīng)用程序更加有效地運(yùn)行。下面例舉幾個(gè)字符的編碼以簡單演示ANSI和Unicode的區(qū)別:字符?A?N?和ANSI碼?41H?4eH?cdbaHUnicode碼?0041H?004eH?548cH三、使用C++進(jìn)行Un

6、icode編程  對寬字符的支持其實(shí)是ANSIC標(biāo)準(zhǔn)的一部分,用以支持多字節(jié)表示一個(gè)字符。寬字符和Unicode并不完全等同,Unicode只是寬字符的一種編碼方式。1、寬字符的定義  在ANSI中,一個(gè)字符(char)的長度為一個(gè)字節(jié)(Byte)。使用Unicode時(shí),一個(gè)字符占據(jù)一個(gè)字,C++在wchar.h頭文件中定義了最基本的寬字符類型wchar_t:typedefunsignedshortwchar_t;從這里我們可以清楚地看到,所謂的寬字符就是無符號短整數(shù)。2、常量寬字符串  對C++程

7、序員而言,構(gòu)造字符串常量是一項(xiàng)經(jīng)常性的工作。那么,如何構(gòu)造寬字符字符串常量呢?很簡單,只要在字符串常量前加上一個(gè)大寫的L就可以了,比如:wchar_t*str1=L"Hello";這個(gè)L非常重要,只有帶上它,編譯器才知道你要將字符串存成一個(gè)字符一個(gè)字。還要注意,在L和字符串之間不能有空格。3、寬字符串庫函數(shù)為了操作寬字符串,C++專門定義了一套函數(shù),比如求寬字符串長度的函數(shù)是size_t__cdelwchlen(constwchar_t*);  為什么要專門定義這些函數(shù)呢?最根本的原因是,ANSI下

8、的字符串都是以’