Unicode ファイルに対する TEncoding の使用

提供: RAD Studio
移動先: 案内検索

VCL への移動

2009 製品バージョン以降、Delphi および C++Builder は、デフォルトの文字タイプが Unicode に変更されました。

以前の形式での読み取りと書き込み

多くの Delphi アプリケーションでは、他のアプリケーションやデータソースとのやり取りを続ける必要があり、それらの多くは ANSI 形式または ASCII 形式のデータしか処理できません。 そのため、TStrings クラスのメソッドはデフォルトでは、アクティブ コード ページに基づいて ANSI エンコード ファイルに書き込み、ファイルにバイト オーダー マーク(BOM)が含まれているかどうかに基づいてファイルを読み取ります。

BOM が検出された場合は、TStrings メソッドは BOM で示されるエンコードでデータを読み取ります。 BOM が検出されない場合、このメソッドはデータを ANSI 形式で読み取り、現在のアクティブ コード ページに基づいて変換します。

RAD Studio 2009 より前のバージョンの Delphi で書き込まれたすべてのファイルも依然として読み取られます。ただし、読み取りと書き込みに同じアクティブ コード ページを使用する必要があります。 同様に、RAD Studio 2009 で ASCII エンコーディングで書き込まれたファイルはどれも、RAD Studio 2009 より前のバージョンで読み取ることができます。

他のエンコーディングを使用する RAD Studio 2009 で書き込まれたファイルは、BOM を生成し、RAD Studio 2009 より前のバージョンでは読み取ることができません。 この時点で、一番よく使用されている BOM 形式のみが検出されます(UTF16 リトルエンディアン、UTF16 ビッグエンディアンと UTF8)。

新しいエンコーディングの使用

Unicode 形式(リトルエンディアン UTF16、ビッグエンディアン UTF16、UTF8、UTF7 など)で TStrings クラスを使ってテキスト データを読み書きした方がよい場合があります。 TEncoding クラスは、.NET Framework の System.Text.Encoding クラスとメソッドや機能がよく似ています。

var
  S: TStrings;
begin
  S := TStringList.Create();
  { ... }
  S.SaveToFile('config.txt', TEncoding.UTF8);

追加パラメータ TEncoding.UTF8 がなければ、'config.txt' は単に現在のアクティブ コードページに基づいて変換され、ANSI エンコードされたものとして書き出されることになります。 TStrings の方で BOM に基づいてエンコーディングを自動的に検出しそれに応じて動作するので、読み取りコードを変更する必要はありません。

特定のコード ページを使って強制的にファイルを読み書きする場合は、TMBCSEncoding のインスタンスを作成し、使用するコード ページをコンストラクタに渡します。その後で、そのインスタンスを使用してファイルを読み書きします。その特定のコード ページがユーザーのアクティブ コード ページと一致しないおそれがあるからです。

これらのクラスには同じことが当てはまります。つまり、データは ANSI データとして読み書きされるのです。 従来 INI ファイルは常に ANSI(ASCII)でエンコードされてきたので、アプリケーションのニーズによっては、これらのファイルを変換することは意味がないかもしれません。 Unicode 形式を使用する場合は、TEncoding クラスを使用してそれを実現する手段も提供されます。

上記の場合はすべて、データは内部的には Unicode で格納され、文字列についてのあらゆるデータ操作は、引き続き、期待どおりに機能します。 データを読み書きするときに、変換が自動的に行われます。

ここに、コードページ識別子(MSDN)のリストを示します。

TEncoding パラメータを受け付けるオーバーロード メソッドのリストを以下に示します。

関連項目