加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi XE – 我应该使用String还是AnsiString?

发布时间:2020-12-15 04:26:12 所属栏目:大数据 来源:网络整理
导读:我终于升级到了Delphi XE.我有一个单位库,我使用字符串来存储简单的ANSI字符(A和U之间的字符).我有101%的确定我永远不会在这些地方使用UNICODE字符. 我想将所有其他库转换为Unicode,但是对于这个特定的库,我认为更好地遵守ANSI.优点是内存需求,因为在某些情
我终于升级到了Delphi XE.我有一个单位库,我使用字符串来存储简单的ANSI字符(A和U之间的字符).我有101%的确定我永远不会在这些地方使用UNICODE字符.

我想将所有其他库转换为Unicode,但是对于这个特定的库,我认为更好地遵守ANSI.优点是内存需求,因为在某些情况下,我加载非常大的TXT文件(仅包含Ansi字符).缺点可能是当我使这些库与普通(unicode)库进行交互时,我必须做很多很多的类型转换.

有一些一般的指导方针,显示何时可以转换为Unicode,何时坚持使用Ansi?

解决方法

一般准则的问题是,这样的事情可以非常具体地针对一个人的情况.你的例子就是其中之一.

然而,对于Googling的人来到这里,一些一般的指导方针是:

>是的,转换为Unicode.不要尝试使用AnsiStrings完全保留旧的应用程序.原因是整个VCL是Unicode,你不应该尝试混合这两个,因为你将转换每次你分配一个Unicode字符串到一个ANSI字符串,这是一个有损的转换.试图保持旧的方式,因为它的工作较少(或类似的原因)会导致你的痛苦;只是拥抱新的字符串类型,转换,并与它一起去.
>而不是随机混合这两个,明确地执行你需要的任何转换,一次 – 例如,如果你从旧版本的程序加载数据,你知道它将是ANSI,所以读它到一个Unicode字符串,就是这样以后,它将是Unicode.
>您不需要更改字符串变量的类型 – 字符串pre-D2009是ANSI,D2009和alter是Unicode.相反,请遵循compiler warnings并查看您使用的字符串方法 -?? 有些仍然采用AnsiString参数,我发现这些都令人困惑.编译器会告诉你的.
>如果使用字符串来保存字节(换句话说,由于字符是一个字节,将它们用作字节数组)切换到TBytes.
>您可能会遇到加密的特定问题(字符串不再是字节/字符,所以’角色’的’字符’可能会得到不同的输出);阅读文本文件(使用流类和TEncoding);坦率地说,杂项的东西.在这里搜索SO,大多数事情都被问过.

评论者,请添加更多的建议…我主要使用C Builder,而不是Delphi,并且可能有很多具体的东西对于Delphi我不知道.

现在你的具体问题:你应该转换这个图书馆吗?

如果:

> A和U之间的价值真的只有这个范围,而且
>这些值表示字符(A真的是A,不是字节值65 – 如果是,使用TBytes)和
>你加载大文本文件和内存是一个问题

然后不转换为Unicode,而是将字符串切换到AnsiStrings,这是有道理的.

请注意:

>每次从ANSI转换为Unicode时都有一个开销
>您可以使用UTF8String,它是一种特定类型的AnsiString,在转换时不会有损耗,并且仍将大多数文本(罗马字符)存储在单个字节中
>将所有的字符串实例更改为AnsiString可能会有一些工作,您将需要检查与它们调用的所有方法,以查看是否执行了太多的隐式转换(用于性能)等
>您可能需要更改库的外层以使用Unicode,以便转换代码或ANSI / Unicode编译器警告对于您的库的用户不可见
>如果转换为Unicode,则可以使用字符集(不记得语法,可能是MySet中的’S’)won’t work.从您对字符A到U的描述,我可以猜到你想使用这种语法.

我的建议就个人而言,我从您所提供的信息中做到这一点的唯一原因是内存使用,可能的性能取决于您在使用这么大量的A..Us中所做的工作.如果真的很重要,那就是驱动程序和约束,你应该转换为ANSI.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读