WeG*_*ars 12 delphi delphi-unicode
我终于升级到了Delphi XE.我有一个单元库,我使用字符串来存储普通的ANSI字符(A和U之间的字符).我101%肯定我永远不会在那些地方使用UNICODE字符.
我想将所有其他库转换为Unicode,但对于这个特定的库,我认为坚持使用ANSI会更好.优点是内存要求,因为在某些情况下我加载了非常大的TXT文件(仅包含Ansi字符).缺点可能是当我使这些库与普通(unicode)库交互时,我必须做很多很多的类型转换.
有一些通用指南可以说明何时转换为Unicode以及何时坚持使用Ansi?
Dav*_*vid 11
一般指导方针的问题在于,这样的事情可能非常特定于某人的情况.你的例子就是其中之一.
然而,对于谷歌搜索和到达这里的人来说,一些一般性指导方针是:
是的,转换为Unicode.不要试图使用AnsiStrings 完全保留旧应用程序.原因是整个VCL都是Unicode,你不应该试图将两者混合,因为每次将Unicode字符串分配给ANSI字符串时都会进行转换,这是一种有损转换.试图保持旧的方式,因为它的工作量较少(或类似的原因)将导致你的痛苦; 只需拥抱新string类型,转换,并与它一起去.
而不是随机混合两者,显式执行您需要的任何转换,例如,如果您从程序的旧版本加载数据,您知道它将是ANSI,那么将其读入Unicode字符串,并且而已.从那以后,它将是Unicode.
您不需要更改string变量的类型- string前D2009是ANSI,而在D2009中,alter是Unicode.相反,请遵循编译器警告并观察您使用的字符串方法 - 有些仍然采用AnsiString参数,我发现这一切都令人困惑.编译器会告诉你.
如果使用字符串来保存字节(换句话说,将它们用作字节数组,因为字符是一个字节)切换到TBytes.
您可能会遇到加密等问题的特定问题(字符串不再是字节/字符,因此'字符'的'字符'可能会得到不同的输出); 读取文本文件(使用流类和TEncoding); 而且,坦率地说,杂项.在这里搜索,大多数事情都被问过.
评论者,请添加更多建议......我主要使用的是C++ Builder,而不是Delphi,对于Delphi我可能还有不少具体的东西我不知道.
现在针对您的具体问题:您应该转换此库吗?
如果:
然后不转换为Unicode,而是将strings 切换为AnsiStrings,这是有道理的.
意识到:
UTF8String,这是一种AnsiString在转换时不会有损的特定类型,并且仍会将大多数文本(罗马字符)存储在一个字节中stringto的所有实例AnsiString可能有点工作,您需要检查所有调用的方法,以查看是否正在执行太多隐式转换(性能)等if 'S' in MySet?)将无法正常工作.从您对字符A到U的描述,我猜你想使用这种语法.我的推荐?就个人而言,我从你给出的信息中做到这一点的唯一原因是内存的使用,以及可能的性能取决于你对这大量的A..Us 做了什么. 如果真的很重要,它既是驱动程序又是约束,你应该转换为ANSI.
| 归档时间: |
|
| 查看次数: |
17591 次 |
| 最近记录: |