AnsiString和String的区别,使用

 我来答
就烦条0o
2016-07-17 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46491
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
原来的Delphi中有两种字符串:AnsiString和WideString。默认的string即AnsiString。而在Delphi 2009中,

新增加了一种UnicodeString。为什么不沿用之前的WideString呢?WideString其实是为了方便使用COM而产生的,就是BSTR。

BSTR没有引用计数,效率较低。而UnicodeString才是AnsiString的真正unicode版本。

于是,Delphi 2009就有了三种字符串类型:AnsiString、WideString、UnicodeString。默认的string即为UnicodeString。

对应的相关类型包括:
AnsiString - PAnsiChar - TAnsiString?(这个可以有……这个真没有,JclAnsiStrings.pas是一个替代品)
WideString - PWideChar - TWideStrings(WideStrings.pas)
UnicodeString - PWideChar - TStrings(Classes.pas)

在实际应用中,一般应使用UnicodeString。在效率第一的场合,可以使用AnsiString处理Ansi文本。而WideString仅在使用COM的

时候才需要,或者是为了向下兼容。

几个字符串相关unit的作用:(D2009有点乱)
StrUtils.pas:UnicodeString的处理函数。
AnsiStrings.pas:AnsiString的处理函数。
WideStrUtils.pas:WideString的处理函数。
WideStrings.pas:TWideStringList的实现。
Classes.pas:TStringList的实现。
JclAnsiStrings.pas:TJclAnsiStringList的实现。这个虽然是第三方库,但不得不提,谁让CodeGear好死赖活不肯加呢。

Delphi 2009的VCL完全使用UnicodeString,彻底支持Unicode。TNT Unicode Controls终于完成了光辉的历史使命。

VCL设计之初不支持Unicode情有可原,但多年以后,在国际化的大潮中,依然没有改变,就是重大失误了。

13年的等待,黄花菜都凉了。不论如何,今日的Delphier,可以放心大胆的使用Unicode了。

关于UTF8String。UTF8String在之前的版本中就是AnsiString,没有什么特殊功能。而在Delphi 2009中,

UTF8String才是真正的UTF8。如果把一个AnsiString赋值给一个UTF8String,那么Delphi 2009会自动转换格式为UTF8String,

这比以前可要方便多了。

关于RawByteString。这个在某些场合有用。如果你有一个函数,接受AnsiString或者UTF8String,但不希望发生自动转换,

那么可以通过重载,实现两个函数分别处理AnsiString和UTR8String。另一个选择就是使用RawByteString,那么不管传过来

的是AnsiString还是UTF8String,RawByteString都会忠实的保持原样,不会做任何转换。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式