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


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


要么


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


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

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

另请参阅我的相关问题:Delphi dbExpress and Interbase: UTF8 migration steps and risks?



更新:在所有DFM和PAS文件中,将所有出现的TStringField都替换为TWideStringField后,我们发现现在还需要在大约100个地方将TWideStringFields的'Size'属性值乘以四(如果使用UTF8)。因此,我开始赏金以减少手工修复DFM的方法

最佳答案

将TStringField用于Unicode字符会给您带来麻烦,它将有$ 00,基本上是用dbExpress驱动程序结尾该字符串,因为这些驱动程序接受P(Ansi)Char字符串。使用TWideStringField在dbExpress中使用PWideChar,因此驱动程序期望使用真正的Unicode代码点。

恐怕没有简单的出路。

关于delphi - 是否可以将TStringField调整为类似于Delphi中的TWideStringField?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2500517/

10-09 03:27