簡體   English   中英

Delphi Unicode字符串不匹配

[英]Delphi Unicode string mismatch

我有一個通過BDE使用Paradox數據庫的Delphi 7應用程序,已將其轉換為Delphi XE3和Firebird。 在Paradox數據庫中有一個字符串字段,其中包含一個加密的字符串,該字符串應該用於軟件許可。 問題是,雖然在舊程序(D7 / Paradox)中讀取此字符串的例程運行良好,但在新程序(XE3 / Firebird)中該例程引發錯誤。 我通過調試發現的原因是從數據庫讀取后的字符串不同。 我怎樣才能解決這個問題?

舊的Paradox數據庫中的字符串:

Ng-DrLrDOtfâtD89D1'D'îu

新的Firebird數據庫中的字符串:

Ng-DrLrDOtfâtD89D1'D'îu

如您所見,兩個數據庫中的字符串相同。

在新的Delphi XE3程序中,當我嘗試使用FieldByName('fieldname')。AsString獲取字段的值時,使用UniDAC數據訪問組件,將返回以下內容:

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,將其更改為TWideStringField。

  3. 重新編譯。

瞧,它的工作完美! 由數據庫中Unicode字符的不完全翻譯/解釋導致的運行時錯誤已消失。

謝謝大家誰較早答復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM