• delphi XE5 UnicodeString的由来


    胡思乱想博客 http://blog.sina.com.cn/s/blog_44fa172f0101dbbj.html
    以下内容是Delphi 2009发布时,网友写的内容,现在再看,对于理解XE5中String的演变,能更好的理解。

    Delphi 2009是第一个完整支持Unicode的Delphi版本。虽然来得太迟,但确是巨大的进步。

    原来的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都会忠实的保持原样,不会做任何转换。

    可以参考的官方资料:《Delphi and Unicode》

    小结:当年的Delphi2009中对unicode string的支持,难道就想到现在的跨平台了!如此,得佩服emb开发Delphi的大牛们,真牛!
  • 相关阅读:
    阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)
    CentOS 7配置成网关服务器
    Mac/Ubuntu下的数据建模工具PDMan,替代PowerDesigner
    Docker卸载高版本重装低版本后启动提示:driver not supported
    Redis连接出现Error: Connection reset by peer的问题是由于使用Redis的安全模式
    Mac流量监控/硬盘监控小工具
    CentOS 7创建自定义KVM模板(现有KVM迁移到另外一台机)
    vi显示行号
    阿里云与微软云的对照表
    CentOS下安装Jenkins(Docker/war/tomcat/java -jar)
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254681.html
Copyright © 2020-2023  润新知