Delphi Unicode字符串不匹配



我有一个Delphi 7应用程序,通过BDE使用Paradox数据库,我已经将其转换为Delphi XE3和Firebird。Paradox数据库中有一个字符串字段,其中包含一个加密字符串,据称该字符串用于软件的许可。问题是,虽然在旧程序(D7/Pladox)中读取该字符串的例程运行良好,但在新程序(XE3/Firebird)中,该例程抛出了一个错误。我通过调试发现的原因是从数据库中读取的字符串不同。我该怎么解决这个问题?

旧Paradox数据库中的字符串:

Ng DrLrDOtfâtD89D1‘D’îu

新火鸟数据库中的字符串:

Ng DrLrDOtfâtD89D1‘D’îu

正如您在上面看到的,两个数据库中的字符串是相同的。

在新的DelphiXE3程序中,使用UniDAC数据访问组件时,我试图使用FieldByName("fieldname")获取字段的值

Ng DrLrDOtfãtD89D1‘D’âu

你可以看到有几个角色是不同的。这导致在程序中检查此字符串的例程出错。你以前经历过这种情况吗?这个问题的可能原因是什么?我可以采取什么措施来解决这个问题。

注1:我使用Delphi中编写的转换器将Paradox数据库转换为Firebird(有关此转换器的实际代码,请参阅:http://goo.gl/6xu2ST)

注2:我用DEFAULT CHARACTER SET UTF8创建了数据库,UniDAC连接组件(TUniConnection)的SpecificOptions CharSet设置为"UTF8"。

我通过以下方式解决了问题:

  1. 在数据模块或代码中,将TUniConnection组件特性SpecificOptions UseUnicode设置为True。

  2. 关闭项目和Delphi IDE。打开WinGrep,在所有项目PAS和DFM文件中为字符串TStringField执行Find Replace,将其更改为TWideStringField。

  3. 重新编译。

瞧,它工作得很完美!由于数据库中Unicode字符的翻译/解释不完整而导致的运行时错误已经消失。

感谢大家早些时候的回复。

相关内容

  • 没有找到相关文章

最新更新