はい、正しく理解しました。これはで、VCLとそのドキュメントは壊れていますです。あなたの混乱は完全に理にかなっています!
Delphi 2009+の実装では、AnsiString
の場合はAsString
プロパティ、string=UnicodeString
の場合はAsWideString
のプロパティを使用する必要があります。実際には、As*String
プロパティは、次のような
を定義されています。
property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
地球上で私たちはAsString
はAnsiString
を返すことを見つけることができるかもしれどのように?残りのVCL/RTLと比較すると、まったく意味がありません。
AnsiString
およびTWideStringField
のstring=UnicodeString
にはTStringField
クラスを使用する実装が壊れています。
また、documentation is also broken:
Data.DB.TField.AsString
ストリング(Delphi)またはAnsiString型(C++)としてフィールドの値を表します。
これは、Delphiでstring
が、AnsiString
を表すものではありません!このプロパティが普通のstring=UnicodeString
タイプを使用しているという事実は完全にミスリーディングです。
データベースの観点からは、Unicodeを処理するか、特定の文字セットで作業するかは、DBドライバによって異なります。しかし、VCLの観点からすれば、Delphi 2009+ではstring
タイプについてしか知りませんが、AsString: String
を使用するとUnicode対応になると確信してください。
+1この動作はIMHO VCL間違った実装です。それはIMHOの間違った命名です。*残りのVCL/RTLと矛盾し、混乱や誤解の原因となります。あなたの質問は完全に理にかなっています。 –