[英]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'。
我通過以下方法解決了這個問題:
在數據模塊或代碼中,將TUniConnection組件屬性SpecificOptions UseUnicode設置為True。
關閉項目和Delphi IDE。 打開WinGrep,並在所有項目PAS和DFM文件中查找以下字符串的查找替換:TStringField,將其更改為TWideStringField。
重新編譯。
瞧,它的工作完美! 由數據庫中Unicode字符的不完全翻譯/解釋導致的運行時錯誤已消失。
謝謝大家誰較早答復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.