Dav*_*vid 13 delphi unicode delphi-2010
我正在编写一个将宽字符串保存到二进制文件的类.我正在使用Delphi 2005,但该应用程序稍后将被移植到Delphi 2010.我在这里感到非常不确定,有人可以确认:
德尔福2005年WideString
是完全相同的同类型作为德尔福2010String
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:UnicodeString
Delphi 2005中没有类型.FML.
Mas*_*ler 12
对于您的第一个问题: WideString
与D2010的字符串类型不完全相同.WideString与其一直以来的COM BSTR类型相同.它由Windows管理,没有引用计数,因此每次将它传递到某处时它都会复制整个BSTR.
UnicodeString
,这是D2009中的默认字符串类型,基本上是AnsiString
我们都知道和喜爱的UTF-16版本.它有一个引用计数,由Delphi编译器管理.
对于第二种,char
现在是默认类型WideChar
,它们是一直使用的相同字符WideString
.它是UTF-16编码,每个字符2个字节.如果将WideString数据保存到文件中,则可以UnicodeString
毫无困难地加载它.这两种类型之间的区别与内存管理有关,而与数据格式无关.
这不是真的 - ex Delphi 2010 字符串隐藏了内部代码页字段 - 但可能这对你来说并不重要。
那是真实的。在 Delphi 2010 中,SizeOf(Char) = 2(Char = WideChar)。
unicode 字符串不能有不同的代码页 - 引入代码页字段是为了为 Ansi 字符串(需要代码页字段)和 Unicode 字符串(不需要它)创建通用的二进制格式。
如果您将 WideString 数据保存到 Delphi 2005 中的流中,并在 Delphi 2010 中将相同的数据加载到字符串中,那么一切都应该可以正常工作。
WideString = BSTR 并且在 Delphi 2005 和 2010 之间没有改变
Delphi 2005 中的 UnicodeString = WideString (Delphi 2005 中是否存在 UnicodeString 类型 - 我不知道) Delphi 2009 及更高版本中的 UnicodeString = string。
@Marco - Delphi 2009+ 中的 Ansi 和 Unicode 字符串具有通用的二进制格式(12 字节标头)。
UnicodeString 代码页 CP_UTF16 = 1200;