Codificación de archivos y tipos de contenido

El conector de entorno de ejecución de la plataforma define una infraestructura para definir y descubrir tipos de contenido para corrientes de datos. (Consulte la sección Tipos de contenido para obtener una visión general de la infraestructura del contenido). Una parte importante del sistema de tipos de contenido es la posibilidad de especificar codificaciones diferentes (juegos de caracteres) para clases de contenido diferentes. La API de recursos permite establecer juegos de caracteres por omisión para proyectos, carpetas y archivos. Estos juegos de caracteres por omisión se consultan si el contenido del propio archivo no define una codificación determinada dentro de su corriente de datos.

Establecer un juego de caracteres

En la sección Tipos de contenido hemos visto que pueden establecerse codificaciones de archivo por omisión para los tipos de contenido. La API de recursos proporciona un control más detallado.

IContainer define un protocolo para establecer el juego de caracteres por omisión para un proyecto o carpeta determinados. Esto da a los conectores (y finalmente al usuario) más libertad para determinar un juego de caracteres adecuado para un conjunto de archivos cuando los juegos de caracteres por omisión del tipo de contenido no son adecuados.

IFile define una API para establecer el juego de caracteres por omisión para un archivo determinado. Si no se especifica ninguna codificación dentro del contenido del archivo, se utilizará este juego de caracteres. El juego de caracteres por omisión del archivo tiene preferencia con respecto a los juegos de caracteres por omisión especificados en la carpeta, el proyecto o el tipo de contenido del archivo.

Estas dos características están disponibles para el usuario final en la página de propiedades de un recurso.

Consultar el juego de caracteres

IFile también define una API para consultar el juego de caracteres de un archivo. Un indicador booleano especifica si sólo debe devolverse el juego de caracteres definido explícitamente para el archivo o si debe devolverse un juego de caracteres implícito. Por ejemplo:

	String charset = myFile.getCharset(false);

devuelve null si no se ha establecido explícitamente ningún juego de caracteres en myFile. Sin embargo,

	String charset = myFile.getCharset(true);

comprobará primero si existe un juego de caracteres establecido explícitamente en el archivo. Si no encuentra ninguno, se comprobará si en el contenido del archivo existe una descripción del juego de caracteres. Si no encuentra ninguna, se comprobará si en las carpetas y proyectos que contienen el archivo existe un juego de caracteres por omisión. Si no encuentra ninguno, se comprobará el juego de caracteres definido por omisión definido para el tipo de contenido. Y, finalmente, se devolverá el juego de caracteres por omisión de la plataforma si no hay ninguna otra designación de un juego de caracteres por omisión. El método de conveniencia getCharset() es equivalente a utilizar getCharset(true).

Tipos de contenido para los archivos del espacio de trabajo

Para los archivos del espacio de trabajo, IFile proporciona una API para obtener la descripción del contenido de los archivos:

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

Esta API debe utilizarse incluso cuando los clientes sólo están interesados en determinar el tipo de contenido: el tipo de contenido puede obtenerse fácilmente de la descripción de contenido. Es posible detectar el tipo de contenido o describir los archivos del espacio de trabajo si obtiene el contenido y el nombre y utiliza la API descrita en la sección Utilización de tipos de contenido, pero esto no es recomendable. La determinación del tipo de contenido utilizando IFile.getContentDescription() tiene en cuenta las naturalezas del proyecto y los valores específicos del proyecto. Si va directamente al gestor de tipos de contenido, ello indica que no ha tenido en cuenta esto. Pero, lo que es más importante, porque la lectura del contenido de los archivos del disco es muy cara. El conector de Recursos mantiene una antememoria de descripciones de contenido de los archivos del espacio de trabajo. Esto reduce el coste de la descripción de contenido a un nivel aceptable.