檔案編碼和內容類型

平台執行時期外掛程式定義基礎架構,以定義和探索資料串流的內容類型。(請參閱內容類型以取得內容組織架構的概觀。) 內容類型系統的重要部分是對不同內容種類指定不同編碼(字集)的能力。資源 API 進一步允許對專案、資料夾和檔案建立預設字集。如果檔案本身的內容在資料串流內未定義特定編碼,則會查閱這些預設字集。

設定字集

我們在內容類型中看到可以對內容類型建立預設的檔案編碼。資源 API 提供了更精細的控制。

IContainer 定義對特定專案或資料夾設定預設字集的通訊協定。這提供外掛程式(最終是使用者)在內容類型中的預設字集可能不適當的時候,有更多的自由可以決定檔案集的適當字集。

IFile 定義設定特定檔案的預設字集的 API。如果檔案內容中未指定編碼方式,將會使用這個字集。檔案的預設字集優先順序高於檔案的資料夾、專案或內容類型中指定的任何預設字集。

這些特性均可提供一般使用者在資源的內容頁面中使用。

查詢字集

IFile 也定義查詢檔案的字集的 API。Boolean 旗標指定是否只要傳回檔案明確定義的字集,或者是否要傳回隱含的字集。例如:

	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() 判定內容類型需考量專案本質和專案專屬的設定。如果您直接執行內容類型管理程式, 則會忽略它。但更重要的原因是,從磁碟讀取檔案的內容非常昂貴。「資源」外掛程式針對工作區中的檔案維持了內容說明的快取記憶體。如此可將內容說明的成本降至可接受的程度。