我正在编写一个类,将宽字符串保存到二进制文件.我正在使用Delphi 2005,但该应用程序将被移植到Delphi 2010.我在这里感到非常不确定,有人可以确认:
> Delphi 2005 WideString与Delphi 2010 String完全相同
> Delphi 2005 WideString char以及Delphi 2010 String char保证始终为2个字节大小.
使用所有的Unicode格式,我不想被我的字符串中的一个字符串突然3字节宽或类似的东西.
编辑:找到这个:“我确实说UnicodeString,而不是WideString,WideString仍然存在,并且不变,WideString由Windows内存管理器分配,应该用于与COM对象交互,WideString直接映射到COM中的BSTR类型“.在http://www.micro-isv.asia/2008/08/get-ready-for-delphi-2009-and-unicode/
现在我更困惑了所以Delphi 2010的WideString与Delphi 2005 WideString不一样?应该使用UnicodeString吗?
编辑2:Delphi 2005中没有UnicodeString类型.
解决方法
对于您的第一个问题:WideString与D2010的字符串不完全相同. WideString是一直以来一样的COM BSTR类型.它由Windows管理,没有引用计数,所以每当你在某个地方通过它时,它会复制整个BSTR.
UnicodeString,它是D2009及其中的默认字符串类型,基本上是我们都知道和喜欢的AnsiString的UTF-16版本.它有一个引用计数,由Delphi编译器管理.
对于第二个,默认的char类型现在是WideChar,它们是与WideString一直使用的相同的字符.它是一个UTF-16编码,每个字符2个字节.如果将WideString数据保存到文件中,可以将其加载到UnicodeString中,而不会有麻烦.两种类型之间的区别与内存管理有关,而不是数据格式.