Codificação de ficheiros e tipos de conteúdo

O plug-in de tempo de execução da plataforma define a infra-estrutura para definir e descobrir tipos de conteúdo para sequências de dados. (Consulte Tipos de conteúdo para uma descrição geral do quadro de conteúdos.) Uma parte importante do sistema de tipos de conteúdo é a capacidade de especificar diferentes codificações (conjuntos de caracteres) para diferentes tipos de conteúdo. A API de recursos permite o estabelecimento de conjuntos de caracteres predefinidos para projectos, pastas e ficheiros. Estes conjuntos de caracteres predefinidos são consultados se o conteúdo do ficheiro propriamente dito não definir determinada codificação dentro da sua sequência de dados.

Definir um conjunto de caracteres

Já vimos em Tipos de conteúdo que se podem estabelecer codificações de ficheiros predefinidas para tipos de conteúdo. A API de recursos proporciona um controlo mais refinado.

O IContainer define protocolo para estabelecer o conjunto de caracteres predefinido para determinado projecto ou pasta. Isto dá aos plug-ins (e em última instância ao utilizador) mais liberdade para determinar um conjunto de caracteres apropriado para um conjunto de ficheiros quando os conjuntos de caracteres predefinidos oriundos do tipo de conteúdo não forem apropriados.

O IFile define a API para estabelecer o conjunto de caracteres predefinido para determinado ficheiro. Se não estiver especificada codificação alguma no conteúdo do ficheiro, será utilizado este conjunto de caracteres. O conjunto de caracteres predefinido do ficheiro tem precedência sobre qualquer outro conjunto de caracteres predefinido especificado na pasta, no projecto ou tipo de conteúdo do ficheiro.

Ambas as funções estão disponíveis para o utilizador final na página de propriedades de um recurso.

Consultar o conjunto de caracteres

O IFile também define a API para consultar o conjunto de caracteres de um ficheiro. Um sinalizador booleano especifica se só deve ser devolvido o conjunto de caracteres explicitamente definido para o ficheiro ou se deve ser devolvido um conjunto de caracteres implícito. Por exemplo:

	String charset = oMeuFicheiro.getCharset(false);

devolve nulo se não estiver definido nenhum conjunto de caracteres explícito em oMeuFicheiro. Todavia,

	String charset = oMeuFicheiro.getCharset(true);

primeiro verifica se existe um conjunto de caracteres que tenha sido explicitamente definido no ficheiro. Se não for encontrado nenhum, o conteúdo do ficheiro é verificado para ver se existe uma descrição do conjunto de caracteres. Se não for encontrado nenhum, são verificadas as pastas e projectos do ficheiro para ver se existe um conjunto de caracteres predefinido. Se não for encontrado nenhum, é verificado o conjunto de caracteres predefinido estabelecido para o próprio tipo de conteúdo. Finalmente, será devolvido o conjunto de caracteres predefinido da plataforma se não houver mais designação nenhuma de um conjunto de caracteres predefinido. O método de conveniência getCharset() é o mesmo que utilizar getCharset(true).

Tipos de conteúdo para ficheiros no espaço de trabalho

No caso de ficheiros no espaço de trabalho, o IFile faculta a API para obter a descrição do conteúdo do ficheiro:

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

Esta API deve ser usada mesmo quando os clientes só estejam interessados em determinar o tipo de conteúdo - o tipo de conteúdo pode ser facilmente obtido da descrição de conteúdo. É possível detectar o tipo de conteúdo ou ficheiros de descrições no espaço de trabalho obtendo o conteúdo e o nome e usando a API descrita em Utilizar tipos de conteúdo, mas tal não se recomenda. A determinação de tipos de conteúdo com IFile.getContentDescription() tem em conta naturezas de projectos e definições específicas de projectos. Se for directamente ao gestor de tipos de conteúdo, estará a ignorá-las. Mais importante ainda, a leitura de conteúdos de ficheiros a partir do disco é muito dispendiosa. O plug-in de recursos mantém uma memória cache das descrições de conteúdo para ficheiros no espaço de trabalho. Assim se reduz o curso das descrições de conteúdo para um nível aceitável.