我们希望将Unicode与Delphi 2009和InterBase一起使用,并发现要将编码从WIN1252切换到Unicode_FSS或UTF8,我们首先必须在所有数据模块中使用Twidestringfield替换Tstringfield的所有实例。对于大约60个数据模块,我们不能简单地在一个周末做到这一点。我只能看到两个迁移策略的选项:

  • 找到允许使用现有tstringfield字段的解决方法,而无需触发“预期:twidestringfield”错误

或者

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

据我所知,持久数据库字段的字段类型在某种类注册表中注册。我们可以使用它使Delphi相信与Unicode_FSS或UTF8编码的InterBase字符列可以使用tstringfield吗?

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

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


更新:在所有DFM和PAS文件中用Twidestringfield替换Tstringfield的所有事件后,我们发现现在还必须将Twidestringfields的“大小”属性值乘以四个(如果我们在100个位置使用UTF8)。因此,我开始了一种赏金,以减少手动工作以修复DFMS

有帮助吗?

解决方案

使用tstringfield进行Unicode字符会让您陷入困境,它将带有$ 00,基本上以例如DBExpress驱动程序结束字符串,因为这些接受P(ANSI)char字符串。使用Twidestringfield在DBExpress中使用Pwidechar,因此驱动程序期望真正的Unicode Codepoint。

恐怕没有简单的出路。

其他提示

Sergey a Kryukov,“ Unicode控件:VCL可以做什么?”,《德尔福杂志》,116(2005年4月),第1页。 33-43(源代码)Delphi杂志

Unfortunately, the text of the original article is not freely available, but ask me if you have questions.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top