4

UnicodeをDelphi2009およびInterbaseで使用したいのですが、文字エンコードをWIN1252からUNICODE_FSSまたはUTF8に切り替えるには、最初にすべてのデータモジュールでTStringFieldのすべてのインスタンスをTWideStringFieldに置き換える必要があることがわかりました。約60のデータモジュールの場合、これを1つの週末に単純に行うことはできません。移行戦略には2つのオプションしか表示されません。

  • 'expected:TWideStringField'エラーをトリガーせずに既存のTStringFieldフィールドを使用できるようにする回避策を見つけます

また

  • 文字列型の競合を回避するために、すべての永続フィールドを削除します

私の知る限り、永続データベースフィールドのフィールドタイプは、ある種のクラスレジストリに登録されています。これを使用して、TStringFieldがUNICODE_FSSまたはUTF8エンコーディングのInterbase文字列で問題ないとDelphiに信じ込ませることができますか?

または、どちらの場合もTStringFieldで動作する市販のdbExpressドライバーを使用できますか?

関連する質問も参照してください:Delphi dbExpressとInterbase:UTF8の移行手順とリスク?


更新:すべてのDFMおよびPASファイルでTStringFieldのすべてのオカレンスをTWideStringFieldに置き換えた後、TWideStringFieldsの「Size」プロパティ値を約100か所で4倍する必要があることがわかりました(UTF8を使用する場合)。そこで、DFMを修正するための手作業を減らす方法の報奨金を開始します

4

1 に答える 1

2

Unicode文字にTStringFieldを使用すると、問題が発生します。$ 00が含まれ、基本的に、文字列はP(Ansi)Char文字列を受け入れるため、たとえばdbExpressドライバーで終了します。TWideStringFieldを使用すると、dbExpressでPWideCharが使用されるため、ドライバーは真のUnicodeコードポイントを期待しています。

簡単な方法はありません、私は恐れています。

于 2010-04-07T07:07:56.467 に答える