读书人

关于在delphi2010下Stringlist对ansiS

发布时间: 2012-02-17 17:50:41 作者: rapoo

关于在delphi2010下Stringlist对ansiString不全支持的问题,请遇见过的网友给个建议
在delphi2010下,stringlist中的字符是以widestring的类型存储的,现在我将一个#$A8字符存储进去,但读取的时候却成了#0,不知道这是怎么回事,该怎么解决此问题呢?请遇见过的网友给个建议,谢谢了!

[解决办法]
那就用AnsiString吧,所以做delphi程序,变量类型尽量符合delphi自身规则,不然以后个版本间的升级可就麻烦了,2010中包括char,pchar都和之前的版本不一样了
[解决办法]
TStringList的问题在我以前的贴中遇到过
http://topic.csdn.net/u/20100121/20/6a051e08-c744-4042-b53a-b76f1af669d7.html
我研究了半天,实际上也没解决TStringList的Unicode问题
关于TStringList中的unicode感觉除非自己重新以非unicode方式重构这个类.否则无法解决转码的问题
不行的话,只能用List或动态数组了

[解决办法]
时至今日,已经不能再用过去的方法了。在以前,AnsiString不仅可以表示字符串,还可以表示“字节流”,所以才会有诸多用法。

当你将一个AnsiString赋值给WideString/UnicodeString时,系统会根据当前的系统代码页进行转换(严格来说,是根据该字符串的代码页进行转换)。作为ANSI编码(MBCS),单独一个$A8是没有意义的(它仅表示一个前导字节,后面还需要一个尾随字节),所以才会丢失。

我给你的建议是放弃TStringList作为字节流的想法。另外,在D2009/2010中,string实际上是UnicodeString,它和WideString采用的编码方式是一致的,均为UTF16-LE,但是WideString是和COM兼容的,而且没有引用计数。

读书人网 >.NET

热点推荐