免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
U n i c o d e與Windows編程(1) | 夢(mèng)之城堡

U n i c o d e與編程(1

本來(lái)想寫個(gè)Unicode與編程中間的一些東西的,結(jié)果看來(lái)看去,想來(lái)想去,還是書(shū)上說(shuō)的好,偷懶的下了本PDF的書(shū),大家認(rèn)真看看哦,對(duì)軟件本地化很有幫助的。


隨著M i c r o s o f t公司的Wi n d o w s操作系統(tǒng)在全世界日益廣泛的流行,對(duì)于軟件開(kāi)發(fā)人員來(lái)說(shuō),將目標(biāo)瞄準(zhǔn)國(guó)際上的各個(gè)不同市場(chǎng),已經(jīng)成為一個(gè)越來(lái)越重要的問(wèn)題。美國(guó)的軟件版本比國(guó)際版本提前6個(gè)月推向市場(chǎng),這曾經(jīng)是個(gè)司空見(jiàn)慣的現(xiàn)象。但是,由于各國(guó)對(duì)Wi n d o w s操作系統(tǒng)提供了越來(lái)越多的支持,因此就更加容易為國(guó)際市場(chǎng)生產(chǎn)各種應(yīng)用軟件,從而縮短了軟件的美國(guó)版本與國(guó)際版本推出的時(shí)間間隔。

Wi n d o w s操作系統(tǒng)始終不逾地提供各種支持,以幫助軟件開(kāi)發(fā)人員進(jìn)行應(yīng)用程序的本地化工作。應(yīng)用軟件可以從各種不同的函數(shù)中獲得特定國(guó)家的信息,并可觀察控制面板的設(shè)置,以

確定用戶的首選項(xiàng)。Wi n d o w s甚至支持不同的字體,以適應(yīng)應(yīng)用的需要。之所以將這一章放在本書(shū)的開(kāi)頭,是因?yàn)榭紤]到U n i c o d e是開(kāi)發(fā)任何應(yīng)用程序時(shí)要采用的基本步驟。本書(shū)的每一章中幾乎都要講到關(guān)于U n i c o d e的問(wèn)題,而且書(shū)中給出的所有示例應(yīng)用程序都是“用U n i c o d e實(shí)現(xiàn)的”。如果你為Microsoft Windows 2000Microsoft Windows CE開(kāi)發(fā)應(yīng)用程序,你應(yīng)該使用U n i c o d e進(jìn)行開(kāi)發(fā)。如果你為Microsoft Windows 98開(kāi)發(fā)應(yīng)用程序,你必須對(duì)某些問(wèn)題作出決定。本章也要講述Windows 98的有關(guān)問(wèn)題。

2.1 字符集

軟件的本地化要解決的真正問(wèn)題,實(shí)際上就是如何來(lái)處理不同的字符集。多年來(lái),許多人一直將文本串作為一系列單字節(jié)字符來(lái)進(jìn)行編碼,并在結(jié)尾處放上一個(gè)零。對(duì)于我們來(lái)說(shuō),這已經(jīng)成了習(xí)慣。當(dāng)調(diào)用s t r l e n函數(shù)時(shí),它在以0結(jié)尾的單字節(jié)字符數(shù)組中返回字符的數(shù)目。問(wèn)題是,有些文字和書(shū)寫規(guī)則(比如日文中的漢字就是個(gè)典型的例子)的字符集中的符號(hào)太多了,因此單字節(jié)(它提供的符號(hào)最多不能超過(guò)2 5 6個(gè))是根本不敷使用的。為此出現(xiàn)了雙字節(jié)字符集(D B C S),以支持這些文字和書(shū)寫規(guī)則。

2.1.1 單字節(jié)與雙字節(jié)字符集

在雙字節(jié)字符集中,字符串中的每個(gè)字符可以包含一個(gè)字節(jié)或包含兩個(gè)字節(jié)。例如,日文

中的漢字,如果第一個(gè)字符在0 x 8 10 x 9 F之間,或者在0 x E 00 x F C之間,那么就必須觀察下一個(gè)字節(jié),才能確定字符串中的這個(gè)完整的字符。使用雙字節(jié)字符集,對(duì)于程序員來(lái)說(shuō)簡(jiǎn)直是個(gè)很大的難題,因?yàn)橛行┳址挥幸粋€(gè)字節(jié)寬,而有些字符則是兩個(gè)字節(jié)寬。如果只是調(diào)用s t r l e n函數(shù),那么你無(wú)法真正了解字符串中究竟有多少字符,它只能告訴你到達(dá)結(jié)尾的0之前有多少個(gè)字節(jié)。A N S IC運(yùn)行期庫(kù)中沒(méi)有配備相應(yīng)的函數(shù),使你能夠?qū)﹄p字節(jié)字符集進(jìn)行操作。但是, Microsoft Visual C++的運(yùn)行期庫(kù)卻包含許多函數(shù),如_ m b s l e n ,它可以用來(lái)操作多字節(jié)(既包括單字節(jié)也包括雙字節(jié))字符串。為了幫助你對(duì)D B C S字符串進(jìn)行操作,Wi n d o w s提供了下面的一組幫助函數(shù)(見(jiàn)表2 – 1 )。前兩個(gè)函數(shù)CharNext Char Prev 允許前向或逆向遍歷DBCS 字符串,方法是每次一個(gè)字符。第三個(gè)函數(shù)IsDBCSLeadByte, 在字節(jié)返回到一個(gè)兩字字節(jié)符的第一個(gè)字節(jié)時(shí)將返回T R U E

2-1 對(duì)D B C S字符串進(jìn)行操作的幫助函數(shù)

函數(shù)描述

PTSTR CharNextPCTSTR pszCurrentChar; 返回字符串中的下一個(gè)字符的地址

PTSTR CharPrevPCTSTR pszStart,PCTSTR 返回字符串中的上一個(gè)字符的地址

p s z C u r r e n t C h a r );

BOOL IsDBCSLeadByteTRUE(BYTE bTestChar);如果該字節(jié)是DBCS字符的第一個(gè)字節(jié),則返回盡管這些函數(shù)使得我們對(duì)D B C S的操作更容易,但還需要,一個(gè)更好的方法讓我們來(lái)看看U n i c o d e。

2.1.2 Unicode:寬字節(jié)字符集

U n i c o d eA p p l eX e r o x公司于1 9 8 8年建立的一個(gè)技術(shù)標(biāo)準(zhǔn)。1 9 9 1年,成立了一個(gè)集團(tuán)機(jī)構(gòu)負(fù)責(zé)U n i c o d e的開(kāi)發(fā)和推廣應(yīng)用。該集團(tuán)由A p p l e、C o m p a qH P、I B M、M i c r o s o f t、O r a c l e、Silicon Graphics, Inc.S y b a s e、U n i s y sX e r o x等公司組成(若要了解該集團(tuán)的全部成員,請(qǐng)

通過(guò)網(wǎng)址w w w. U n i c o d e . o rg查找)。該集團(tuán)負(fù)責(zé)維護(hù)U n i c o d e標(biāo)準(zhǔn)。U n i c o d e的完整描述可以參閱A d d i s o n We s l e y出版的《Unicode Standard》一書(shū)(該書(shū)可以通過(guò)網(wǎng)址w w w. U n i c o d e . o rg訂購(gòu))。

U n i c o d e提供了一種簡(jiǎn)單而又一致的表示字符串的方法。U n i c o d e字符串中的所有字符都是1 6位的(兩個(gè)字節(jié))。它沒(méi)有專門的字節(jié)來(lái)指明下一個(gè)字節(jié)是屬于同一個(gè)字符的組成部分,還是一個(gè)新字符。這意味著你只需要對(duì)指針進(jìn)行遞增或遞減,就可以遍歷字符串中的各個(gè)字符,不再需要調(diào)用C h a r N e x t、C h a r P r e vI s D B C S L e a d B y t e之類的函數(shù)。

由于U n i c o d e用一個(gè)1 6位的值來(lái)表示每個(gè)字符,因此總共可以得到65 000個(gè)字符,這樣,它就能夠?qū)κ澜绺鲊?guó)的書(shū)面文字中的所有字符進(jìn)行編碼,遠(yuǎn)遠(yuǎn)超過(guò)了單字節(jié)字符集的2 5 6個(gè)字符的數(shù)目。

目前,已經(jīng)為阿拉伯文、中文拼音、西里爾字母(俄文)、希臘文、西伯萊文、日文、韓

文和拉丁文(英文)字母定義了U n i c o d e代碼點(diǎn)。這些字符集中還包含了大量的標(biāo)點(diǎn)符號(hào)、數(shù)學(xué)符號(hào)、技術(shù)符號(hào)、箭頭、裝飾標(biāo)志、區(qū)分標(biāo)志和其他許多字符。如果將所有這些字母和符號(hào)加在一起,總計(jì)約達(dá)3 5 0 0 0個(gè)不同的代碼點(diǎn),這樣,總計(jì)65 000多個(gè)代碼點(diǎn)中,大約還有一半可供將來(lái)擴(kuò)充時(shí)使用。65 536個(gè)字符可以分成不同的區(qū)域。表2-2 顯示了這樣的區(qū)域的一部分以及分配給這些區(qū)域的字符。

2-2 區(qū)域字符

1 6位代碼字符16 位代碼字符

0 0 0 0 – 0 0 7 F A S C I I 0 3 0 0 – 0 3 6 F 通用區(qū)分標(biāo)志

0 0 8 0 – 0 0 F F 拉丁文1字符0 4 0 0 – 0 4 F F 西里爾字母

0 1 0 0 – 0 1 7 F 歐洲拉丁文0 5 3 0 – 0 5 8 F 亞美尼亞文

0 1 8 0 – 0 1 F F 擴(kuò)充拉丁文0 5 9 0 – 0 5 F F 西伯萊文

0 2 5 0 – 0 2 A F 標(biāo)準(zhǔn)拼音0 6 0 0 – 0 6 F F 阿拉伯文

0 2 B 0 – 0 2 F F 修改型字母0 9 0 0 – 0 9 7 F 梵文

目前尚未分配的代碼點(diǎn)大約還有29 000個(gè),不過(guò)它們是保留供將來(lái)使用的。另外,大約有6 0 0 0個(gè)代碼點(diǎn)是保留供個(gè)人使用的。

代碼點(diǎn)是字符集中符號(hào)的位置。

2.2 為什么使用U n i c o d e

當(dāng)開(kāi)發(fā)應(yīng)用程序時(shí),當(dāng)然應(yīng)該考慮利用U n i c o d e的優(yōu)點(diǎn)。即使現(xiàn)在你不打算對(duì)應(yīng)用程序進(jìn)行本地化,開(kāi)發(fā)時(shí)將U n i c o d e放在心上,肯定可以簡(jiǎn)化將來(lái)的代碼轉(zhuǎn)換工作。此外, U n i c o d e具備下列功能:

. 可以很容易地在不同語(yǔ)言之間進(jìn)行數(shù)據(jù)交換。

. 使你能夠分配支持所有語(yǔ)言的單個(gè)二進(jìn)制. e x e文件或D L L文件。

. 提高應(yīng)用程序的運(yùn)行效率(本章后面還要詳細(xì)介紹)。

2.3 Windows 2000U n i c o d e

Windows 2000是使用U n i c o d e從頭進(jìn)行開(kāi)發(fā)的,用于創(chuàng)建窗口、顯示文本、進(jìn)行字符串操作等的所有核心函數(shù)都需要U n i c o d e字符串。如果調(diào)用任何一個(gè)Wi n d o w s函數(shù)并給它傳遞一個(gè)A N S I字符串,那么系統(tǒng)首先要將字符串轉(zhuǎn)換成U n i c o d e,然后將U n i c o d e字符串傳遞給操作系統(tǒng)。如果希望函數(shù)返回A N S I字符串,系統(tǒng)就會(huì)首先將U n i c o d e字符串轉(zhuǎn)換成A N S I字符串,然后將結(jié)果返回給你的應(yīng)用程序。所有這些轉(zhuǎn)換操作都是在你看不見(jiàn)的情況下發(fā)生的。當(dāng)然,進(jìn)行這些字符串的轉(zhuǎn)換需要占用系統(tǒng)的時(shí)間和內(nèi)存。例如,如果調(diào)用C r e a t e Wi n d o w E x函數(shù),并傳遞類名字和窗口標(biāo)題文本的非U n i c o d e字符串,那么C r e a t e Wi n d o w E x必須分配內(nèi)存塊(在你的進(jìn)程的默認(rèn)堆中),將非U n i c o d e字符串轉(zhuǎn)換成U n i c o d e字符串,并將結(jié)果存儲(chǔ)在分配到的內(nèi)存塊中,然后調(diào)用U n i c o d e版本的C r e a t e Wi n d o w E x函數(shù)。

對(duì)于用字符串填入緩存的函數(shù)來(lái)說(shuō),系統(tǒng)必須首先將U n i c o d e字符串轉(zhuǎn)換成非U n i c o d e字符串,然后你的應(yīng)用程序才能處理該字符串。由于系統(tǒng)必須執(zhí)行所有這些轉(zhuǎn)換操作,因此你的應(yīng)用程序需要更多的內(nèi)存,并且運(yùn)行的速度比較慢。通過(guò)從頭開(kāi)始用U n i c o d e來(lái)開(kāi)發(fā)應(yīng)用程序,就能夠使你的應(yīng)用程序更加有效地運(yùn)行。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
windows環(huán)境下unicode編程總結(jié)
VC中unicode項(xiàng)目向多字節(jié)字符集項(xiàng)目移植
WIDOWS核心資料(全)
關(guān)于unicode,mbcs,utf8,charset,encoding等相關(guān)概念的說(shuō)明
LPSTR、LPCSTR、LPTSTR和LPCTSTR的意義及區(qū)別(轉(zhuǎn))
Unicode簡(jiǎn)介
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服