delphi - 新的字符串类型在 Delphi 2009/2010 中如何工作?

标签 delphi unicode string delphi-2009

我必须将大型遗留应用程序转换为 Delphi 2009,它到处使用字符串、AnsiStrings、WideStrings 和 UTF8 数据,而且我很难理解新字符串类型的工作原理以及应如何使用它们。

该应用程序使用 TntUnicodeControls 完全支持 Unicode,并且存在需要特定编码(主要是 UTF8 和 UTF16)的字符串的第 3 方 DLL,这使得转换任务并不像人们想象的那么简单。

我在 C DLL 调用和选择正确类型方面尤其遇到问题。 我还觉得发生了许多隐式字符串转换,因为其中一个 DLL 似乎总是接收 UTF-8 编码的字符串,无论 Delphi 字符串是如何编码的。

有人可以提供有关新的 Delphi 2009 字符串类型 UnicodeString 和 RawByteString 的简短概述,或许还有一些使用提示以及转换 2009 之前的应用程序时可能出现的陷阱吗?

最佳答案

参见Delphi and Unicode ,Marco Cantù 撰写的白皮书,我猜 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) ,作者:乔尔。

一个陷阱是默认的 Win32 API 调用已映射为使用 W(宽字符串)版本而不是 A (ANSI) 版本,例如 ShellExecuteA 如果您的代码正在执行棘手的指针代码假设 AnsiString 的内部布局,它将中断。后备方案是将 PChar 替换为 PAnsiChar,将 Char 替换为 AnsiChar,将 string 替换为AnsiString,并在该部分代码的 Win32 API 调用末尾附加 A。在代码实际编译并正常运行后,您可以重构代码以使用 string (UnicodeString)。

关于delphi - 新的字符串类型在 Delphi 2009/2010 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399395/

相关文章:

delphi - Delphi 7 和 Delphi 2010 之间的 TVirtualStringTree 兼容性 - 'Parameter lists differ'

delphi - 服务中的 CreateProcessWithLogonw 返回代码 5 : access denied

java - iOs 表情符号在使用 java 的推送通知中显示为 Unicode 字符

HTML CSS Unicode "entity"行高与标准字体不同?

python - 如何更改列表中元素的位置

c++ - 字符* 替换为字符*

xml - Delphi 的 oBix (xml) 客户端

delphi - 用于测试 Windows 7 兼容性的任何已知的 delphi 问题

java - Unicode block : get alphabet of every language [Java]

java - 如何通过java快速将字符串数组转换为二维字符数组?