プラットフォームのランタイム・プラグインは、データ・ストリームのコンテンツ型を定義および検出するインフラストラクチャーを定義します。 (コンテンツ・フレームワークの概要については、『コンテンツ型』を参照してください。) コンテンツ型システムでは、さまざまな種類のコンテンツのさまざまなエンコード (文字セット) を指定する機能が重要となります。 リソース API を使用すると、さらにプロジェクト、フォルダー、およびファイルに対してデフォルトの文字セットを設定することができます。このデフォルトの文字セットは、ファイル自体のコンテンツがデータ・ストリーム内に特定のエンコード方式を定義していない場合に照会されます。
『コンテンツ型』では、コンテンツ型に対してデフォルトのファイルのエンコードを設定することについて説明しました。 リソース API には、より細かく調整されたコントロールがあります。
IContainer は、 特定のプロジェクトまたはフォルダーに対してデフォルトの文字セットを設定するプロトコルを定義します。これにより、プラグイン (最終的にはユーザー) は、コンテンツ型のデフォルトの文字セットが適切でない場合に、適切な文字セットをより自由に決定することができます。
IFile は、 特定のファイルに対してデフォルトの文字セットを設定する API を定義します。 ファイル・コンテンツ内にエンコード方式が指定されていない場合は、この文字セットが使用されます。 ファイルのデフォルトの文字セットは、ファイルのフォルダー、プロジェクト、またはコンテンツ型に指定されているデフォルトの文字セットよりも優先されます。
エンド・ユーザーは、これらのフィーチャーをリソースのプロパティー・ページで使用できます。
IFile は、ファイルの文字セットを照会する API も定義します。ブール・フラグは、ファイルに対して明示的に定義されている文字セットのみが戻されるか、または暗黙の文字セットも戻されるかを指定します。以下に例を示します。
String charset = myFile.getCharset(false);
myFile に明示的に設定されている文字セットがない場合は、ヌルが戻されます。 ただし、
String charset = myFile.getCharset(true);
の場合は、ファイルに明示的に設定されている文字セットが最初に確認されます。そのような文字セットがない場合は、ファイルのコンテンツに文字セットの記述がないか確認されます。 そのような記述がない場合は、ファイルに含まれているフォルダーおよびプロジェクトにデフォルトの文字セットがないか確認されます。そのような文字セットがない場合は、コンテンツ型自体に定義されているデフォルトの文字セットが確認されます。最後に、他にデフォルトの文字セットが指定されていない場合、プラットフォームのデフォルトの文字セットが戻されます。便利なメソッド getCharset() は、getCharset(true) を使用した場合と同じです。
ワークスペース内のファイルに対して、IFile はファイル・コンテンツの記述を取得するための API を提供します。
IFile file = ...; IContentDescription description = file.getDescription();
この API は、クライアントがコンテンツ型の判別にのみ関心がある場合でも、使用する必要があります。コンテンツ型はコンテンツの記述から容易に取得できます。 コンテンツおよび名前を取得し、『コンテンツ型の使用』に記載された API を使用して、ワークスペース内でコンテンツ型を検出したり、ファイルを記述することができます。ただし、この方法は推奨しません。IFile.getContentDescription() を使用したコンテンツ型の判別では、プロジェクト・ネーチャーおよびプロジェクト固有の設定が考慮されます。コンテンツ型マネージャーに直接移動する場合は、この設定が無視されます。 ただし、より重要なのは、ディスクからファイルの内容を読み取る処理はコストがかかるためです。 リソース・プラグインは、ワークスペース内のファイルのコンテンツ記述をキャッシュに維持します。 これにより、コンテンツ記述のコストが許容できるレベルまで削減されます。