ファイル・エンコードおよびコンテンツ・タイプ

プラットフォームのランタイム・プラグインは、データ・ストリームのコンテンツ・タイプを定義および検出するインフラストラクチャーを定義します。 (コンテンツ・フレームワークの概要については、『コンテンツ・タイプ』を参照してください。) コンテンツ・タイプシステムでは、さまざまな種類のコンテンツのさまざまなエンコード (文字セット) を指定する機能が重要となります。リソース 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() を使用したコンテンツ・タイプの判別では、プロジェクト・ネーチャーおよびプロジェクト固有の設定が考慮されます。コンテンツ・タイプ・マネージャーに直接移動する場合は、この設定が無視されます。ただし、より重要なのは、ディスクからファイルの内容を読み取る処理はコストがかかるためです。リソース・プラグインは、ワークスペース内のファイルのコンテンツ記述をキャッシュに維持します。これにより、コンテンツ記述のコストが許容できるレベルまで削減されます。