Codifica file e tipi di contenuto

Il plugin di runtime della piattaforma definisce l'infrastruttura per la definizione e l'individuazione dei tipi di contenuto per i flussi di dati. Per una panoramica del framework del contenuto, fare riferimento alla sezione Tipi di contenuto. Una parte importante del sistema dei tipi di contenuto è la capacità di specificare codifiche diverse (insiemi di caratteri) per i diversi tipi di contenuto. L'API delle risorse, inoltre, consente di stabilire insiemi di caratteri predefiniti per progetti, cartelle e file. Questi insiemi di caratteri predefiniti sono consultati se il contenuto del file non definisce una particolare codifica all'interno del flusso di dati.

Impostazione di un insieme di caratteri

Nella sezione Tipi di contenuto è stato illustrato che le codifiche dei file predefiniti possano essere stabilite per i tipi di contenuto. Un controllo più approfondito viene fornito dall'API delle risorse.

IContainer definisce il protocollo per l'impostazione dell'insieme di caratteri predefinito per un determinato progetto o cartella. Ciò fornisce ai plugin (e quindi all'utente) una maggiore libertà nel determinare un insieme di caratteri appropriato per un insieme di file, quando gli insiemi di caratteri predefiniti del tipo di contenuto non sono appropriati.

IFile definisce l'API per l'impostazione dell'insieme di caratteri predefinito per un determinato file. Se nessuna codifica viene specificata all'interno del contenuto del file, verrà utilizzato questo insieme di caratteri. L'insieme di caratteri predefinito del file ha la precedenza su qualsiasi insieme di caratteri predefinito specificato nella cartella, nel progetto o nel tipo di contenuto del file.

Entrambe le funzioni sono disponibili per l'utente finale nella pagina delle proprietà relativa a una risorsa.

Query dell'insieme di caratteri

IFile definisce l'API per effettuare query relative all'insieme di caratteri di un file. Un indicatore booleano specifica se deve essere restituito solo l'insieme di caratteri esplicitamente definito per il file o se deve essere restituito l'insieme di caratteri implicito. Ad esempio:

	String charset = myFile.getCharset(false);

restituisce un valore null se nessun insieme di caratteri è stato esplicitamente impostato su myFile. Tuttavia,

	String charset = myFile.getCharset(true);

ricerca prima un insieme di caratteri esplicitamente impostato nel file. Se non viene rilevato alcun insieme di caratteri, nel contenuto del file verrà ricercata una descrizione dell'insieme di caratteri. Se non viene rilevata alcuna descrizione, nel file contenente cartelle e progetti verrà ricercato un insieme di caratteri predefinito. Se non viene rilevato alcun insieme predefinito, verrà ricercato l'insieme di caratteri predefinito specificato per il tipo di contenuto. Infine, l'insieme di caratteri predefinito della piattaforma verrà restituito se non esiste altra designazione o insieme di caratteri predefinito. Il metodo consigliato getCharset() corrisponde all'utilizzo di getCharset(true).

Tipi di contenuto per file nello spazio di lavoro

Per i file presenti nello spazio di lavoro, IFile fornisce un'API per ottenere la descrizione del contenuto del file:

IFile file = ...;
IContentDescription description = file.getDescription();

Questa API dovrebbe essere utilizzata anche quando i client sono solo interessati a determinare il tipo di contenuto; il tipo di contenuto può essere facilmente ottenuto dalla descrizione. È possibile rilevare il tipo di contenuto o descrivere i file nello spazio di lavoro ottenendo il contenuto e il nome e utilizzando l'API descritta in Utilizzo dei tipi di contenuto, ma questa operazione è sconsigliata. La determinazione del tipo di contenuto utilizzando IFile.getContentDescription() tiene in considerazione le nature del progetto e le impostazioni specifiche di progetto. Se si utilizza direttamente il gestore del tipo di contenuto, queste indicazioni sono ignorate. Bisogna considerare che la lettura del contenuto dei file da disco è molto onerosa. Il plugin delle risorse mantiene in cache le descrizioni di contenuto per i file dello spazio di lavoro. Questo riduce il costo delle operazioni sulla descrizione del contenuto a livelli accettabili.