1

Delphi 2007 には、メモの内容をテキスト ファイルに書き込んでロードするアプリケーションがあります。TMemo charset が AnisCharSet に設定され、プロジェクト オプションでランタイム テーマを有効にする --> アプリケーションがオフになっています。ロードされるコンテンツは、ウムラウト文字を含むこの「möglich」のようなものです。このアプリケーションは Delphi 2007 で正常に動作し、テキスト ファイルに書き込み、読み込んでコンテンツを正しく表示します。ファイルへの書き込み中に、メモはウムラウト文字列をこの「mцchten」のように変換し、メモがそれをロードして戻すと、正しく表示されます。

同じアプリケーションを delphi xe2 にアップグレードしましたが、メモがファイルからテキストをロードするときに、正しく表示されません。つまり、ウムラウト文字列を「möglich」として表示する代わりに、「mцchten」という変換が表示されます。 Delphi 2007 での発生は、Delphi xe2 でウムラウト文字を表示するときに発生しないようです。

Delphi xe2アプリケーションでもウムラウト文字を適切に表示するために何ができるかを提案できますか? memo の savetofile オプションと loadfromfile オプションがエンコードなしで使用されているだけです。Xe2 では、ランタイム テーマがオフになり、メモのフォント文字セットはまだ Ansi のままです。

ここでの問題は、delphi 2007 アプリケーションを使用して保存された delphi xe2 アプリケーションのテキスト ファイルから文字を読み込んで表示することです。

4

1 に答える 1

4

ウムラウトは、D2007 などの Ansi 環境ではコードページに依存するため、XE2 などの Unicode 環境では特別な処理が必要になります。そのため、代わりに UTF-8 などのコードページに依存しない形式を使用してデータを読み書きすることをお勧めします。特に、ある PC から別の PC にデータを移動する必要がある場合は、OS のデフォルトの Ansi コードページが異なる可能性があります。

この特定の状況では、D2007 コードがデータを保存したときに OS が使用していた特定のコードページを見つけて (OS のデフォルトの Ansi コードページを使用していたため)、それを使用するように XE2 コードに明示的に指示する必要がある場合があります。データを読み取るときと同じコードページ。XE2 では、TStrings.LoadFrom...()メソッドにオプションのTEncodingパラメーターがあります。このメソッドを使用して、特定のコードページのオブジェクトTEncoding.GetEncoding()を取得できます。TEncoding

于 2013-01-31T18:23:58.427 に答える