4

我们想在 Delphi 2009 和 Interbase 中使用 Unicode,并发现要将字符编码从 WIN1252 切换到 UNICODE_FSS 或 UTF8,我们首先必须在所有数据模块中用 TWideStringField 替换所有 TStringField 实例。对于大约 60 个数据模块,我们不能简单地在一个周末内完成这项工作。我只能看到迁移策略的两个选项:

  • 找到一种解决方法,允许使用现有的 TStringField 字段而不触发“预期:TWideStringField”错误

或者

  • 删除所有持久字段以避免字符串类型冲突

据我所知,持久数据库字段的字段类型已在某种类注册表中注册。我们可以用它来让 Delphi 相信 TStringField 可以用于具有 UNICODE_FSS 或 UTF8 编码的 Interbase 字符列吗?

或者我们可以使用在这两种情况下都可以与 TStringField 一起使用的商业 dbExpress 驱动程序吗?

另请参阅我的相关问题:Delphi dbExpress 和 Interbase:UTF8 迁移步骤和风险?


更新:在所有 DFM 和 PAS 文件中将所有出现的 TStringField 替换为 TWideStringField 之后,我们发现现在还需要在大约 100 个位置将 TWideStringFields 的“Size”属性值乘以四(如果我们使用 UTF8)。所以我开始赏金寻找一种减少修复 DFM 的手动工作的方法

4

1 回答 1

2

将 TStringField 用于 unicode 字符会给您带来麻烦,其中会包含 $00,基本上以 dbExpress 驱动程序结束字符串,因为这些驱动程序接受 P(Ansi)Char 字符串。使用 TWideStringField 在 dbExpress 中使用 PWideChar,因此驱动程序需要真正的 unicode 代码点。

恐怕没有简单的出路。

于 2010-04-07T07:07:56.467 回答