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

O plug-in do tempo de execução da plataforma define a infra-estrutura para definir e descobrir os tipos de conteúdo para os fluxos de dados. (Consulte os Tipos de conteúdo para obter uma visão geral da estrutura do conteúdo.) Uma parte importante do sistema do tipo de conteúdo é a habilidade de especificar diferentes codificações (conjuntos de caracteres) para diferentes tipos de conteúdo. A API de recursos também permite conjuntos de caracteres padrão a serem estabelecidos para projetos, pastas e arquivos. Esses conjuntos de caracteres padrão são consultados se o conteúdo do arquivo não definir uma codificação específica dentro do seu fluxo de dados.

Configurando um Conjunto de Caracteres

Vimos em Tipos de conteúdo que as codificações do arquivo padrão podem ser estabelecidas para os tipos de conteúdo. O controle mais restrito é fornecido pela API de recursos.

O IContainer define o protocolo para configurar o conjunto de caracteres padrão para um projeto ou uma pasta específica. Isso dá mais liberdade aos plug-ins (e ultimamente ao usuário) para determinar um conjunto de caracteres apropriado para um conjunto de arquivos quando os conjuntos de caracteres padrão do tipo de conteúdo podem não ser apropriados.

O IFile define a API para configurar o conjunto de caracteres padrão para um arquivo específico. Se nenhuma codificação estiver especificada dentro do conteúdo do arquivo, esse conjunto de caracteres será utilizado. O conjunto de caracteres padrão do arquivo tem precedência sobre qualquer conjunto de caracteres padrão especificado na pasta do arquivo, projeto ou tipo de conteúdo.

Ambos os recursos estão disponíveis para o usuário final na página de propriedades para um recurso.

Consultando o Conjunto de Caracteres

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

	String charset = myFile.getCharset(false);

retorna nulo se nenhum caractere foi configurado explicitamente em myFile. No entanto,

	String charset = myFile.getCharset(true);

primeiramente, verificará um conjunto de caracteres que foi configurado explicitamente no arquivo. Se nenhum for localizado, o conteúdo do arquivo será verificado para obter uma descrição do conjunto de caracteres. Se nenhum for localizado, as pastas e os projetos do arquivo serão verificados para obter um conjunto de caracteres padrão. Se nenhum for localizado, o conjunto de caracteres padrão definido para o tipo de conteúdo será marcado. Finalmente, o conjunto de caracteres padrão será retornado se não houver outra atribuição de um conjunto de caracteres padrão. O método de conveniência getCharset() é o mesmo ao utilizar getCharset(true).

Tipos de Conteúdos para Arquivos no Espaço de Trabalho

Para arquivos no espaço de trabalho, o IFile fornece a API para obter a descrição de conteúdo de arquivo:

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

Essa API deve ser utilizada quando os clientes apenas estão interessados na determinação da API - o tipo de conteúdo pode ser facilmente obtido a partir da descrição do conteúdo. É possível detectar o tipo de conteúdo ou descrever os arquivos no espaço de trabalho, obtendo o conteúdo e o nome e utilizando a API descrita em Utilizando Tipos de Conteúdo, mas isso não é recomendado. A determinação de tipo de conteúdo utilizando IFile.getContentDescription() leva em conta as naturezas dos projetos e as configurações específicas do projeto. Se você for diretamente para o gerenciador de tipo de conteúdo, estará ignorando isso. Porém com mais importância, porque ler o conteúdo dos arquivos a partir do disco é muito caro. O plug-in Recursos mantém uma cache de descrições de conteúdo para os arquivos no espaço de trabalho. Isso reduz o custo de descrição de conteúdo em um nível aceitável.