原來(lái)的Delphi中有兩種字符串:AnsiString和WideString。默認(rèn)的string即AnsiString。而在Delphi2009中,新增加了一種UnicodeString。為什么不沿用之前的WideString呢?WideString其實(shí)是為了方便使用COM而產(chǎn)生的,就是BSTR。BSTR沒(méi)有引用計(jì)數(shù),效率較低。而UnicodeString才是AnsiString的真正unicode版本。于是,Delphi2009就有了三種字符串類型:AnsiString、WideString、UnicodeString。默認(rèn)的string即為UnicodeString。對(duì)應(yīng)的相關(guān)類型包括:
AnsiString -PAnsiChar -TAnsiString?(這個(gè)可以有……這個(gè)真沒(méi)有,JclAnsiStrings.pas是一個(gè)替代品)
WideString -PWideCha r - TWideStrings(WideStrings.pas)
UnicodeString - PWideChar - TStrings(Classes.pas)
在實(shí)際應(yīng)用中,一般應(yīng)使用UnicodeString。在效率第一的場(chǎng)合,可以使用AnsiString處理Ansi文本。而WideString僅在使用COM的時(shí)候才需要,或者是為了向下兼容。
幾個(gè)字符串相關(guān)unit的作用
StrUtils.pas:UnicodeString的處理函數(shù)。
AnsiStrings.pas:AnsiString的處理函數(shù)。
WideStrUtils.pas :WideString的處理函數(shù)。
WideStrings.pas:TWideStringList的實(shí)現(xiàn)。
Classes.pas:TStringList的實(shí)現(xiàn)。
JclAnsiStrings.pas:TJclAnsiStringList的實(shí)現(xiàn)。這個(gè)雖然是第三方庫(kù),但不得不提,誰(shuí)讓CodeGear好死賴活不肯加呢。
Delphi 2009的VCL完全使用UnicodeString,徹底支持Unicode。TNT UnicodeControls終于完成了光輝的歷史使命。VCL設(shè)計(jì)之初不支持Unicode情有可原,但多年以后,在國(guó)際化的大潮中,依然沒(méi)有改變,就是重大失誤了。13年的等待,黃花菜都涼了。不論如何,今日的Delphier,可以放心大膽的使用Unicode了。
關(guān)于UTF8String。UTF8String在之前的版本中就是AnsiString,沒(méi)有什么特殊功能。而在Delphi2009中,UTF8String才是真正的UTF8。如果把一個(gè)AnsiString賦值給一個(gè)UTF8String,那么Delphi2009會(huì)自動(dòng)轉(zhuǎn)換格式為UTF8String,這比以前可要方便多了。
關(guān)于RawByteString。這個(gè)在某些場(chǎng)合有用。如果你有一個(gè)函數(shù),接受AnsiString或者UTF8String,但不希望發(fā)生自動(dòng)轉(zhuǎn)換,那么可以通過(guò)重載,實(shí)現(xiàn)兩個(gè)函數(shù)分別處理AnsiString和UTR8String。另一個(gè)選擇就是使用RawByteString,那么不管傳過(guò)來(lái)的是AnsiString還是UTF8String,RawByteString都會(huì)忠實(shí)的保持原樣,不會(huì)做任何轉(zhuǎn)換。
愛(ài)華網(wǎng)本文地址 » http://www.klfzs.com/a/25101015/241584.html
愛(ài)華網(wǎng)

