我们想在Delphi 2009和Interbase中使用Unicode,并发现要将字符编码从WIN1252切换到UNICODE_FSS或UTF8,我们首先必须在所有数据模块中用TWideStringField替换所有TStringField实例。对于大约60个数据模块,我们不能简单地在一个周末执行此操作。我只能看到两种迁移策略选项:
或
据我所知,持久数据库字段的字段类型是在某种类注册表中注册的。我们是否可以使用它来使Delphi相信TStringField适用于具有UNICODE_FSS或UTF8编码的Interbase字符列?
或者我们可以使用在两种情况下都使用TStringField的商业dbExpress驱动程序吗?
另请参阅我的相关问题:Delphi dbExpress and Interbase: UTF8 migration steps and risks?
更新:在所有DFM和PAS文件中用TWideStringField替换TStringField的所有出现后,我们发现现在还需要将TWideStringFields的'Size'属性值乘以4(如果我们使用UTF8)在大约100个地方。因此,我开始奖励一种减少手动工作来修复DFM的方法
答案 0 :(得分:2)
使用TStringField进行unicode字符会让你遇到麻烦,它会有$ 00,基本上用例如dbExpress驱动程序结束字符串,因为它们接受P(Ansi)字符串。使用TWideStringField在dbExpress中使用PWideChar,因此驱动程序期望真正的unicode代码点。
恐怕没有简单的出路。
答案 1 :(得分:0)
Sergey A Kryukov,'Unicode控制:VCL能做什么?',德尔福杂志,116(2005年4月),p。 33-43 (Source code) 德尔福杂志
Unfortunately, the text of the original article is not freely available, but ask me if you have questions.