파일 인코딩 및 컨텐츠 유형

플랫폼 런타임 플러그인은 데이터 스트림의 컨텐츠 유형을 정의하고 발견하는 하부구조를 정의합니다. (컨텐츠 프레임워크에 대한 개요는 컨텐츠 유형을 참조하십시오.) 컨텐츠 유형 시스템의 중요 부분은 다른 컨텐츠 유형에 다른 인코딩(문자 세트)을 지정하는 기능입니다. 자원 API를 사용하면 프로젝트, 폴더 및 파일에 기본 문자 세트를 추가로 설정할 수 있습니다. 이러한 기본 문자 세트는 파일 컨텐츠 자체가 데이터 스트림 내부에 특정 인코딩을 정의하지 않을 경우에 참조됩니다.

문자 세트 설정

기본 파일 인코딩이 컨텐츠 유형에 설정될 수 있음을 컨텐츠 유형에서 확인했습니다. 더욱 정밀한 제어가 자원 API에서 제공됩니다.

IContainer는 특정 프로젝트 또는 폴더에 기본 문자 세트를 설정하는 프로토콜을 정의합니다. 이를 통해 컨텐츠 유형의 기본 문자 세트가 적절하지 않을 때 플러그인(및 궁극적으로는 사용자)이 파일 세트에 적절한 문자 세트를 더욱 자유롭게 판별할 수 있게 됩니다.

IFile은 특정 파일에 기본 문자 세트를 설정하는 API를 정의합니다. 인코딩이 파일 컨텐츠 내부에 지정되지 않으면 이 문자 세트가 사용됩니다. 파일의 기본 문자 세트가 파일의 폴더, 프로젝트 또는 컨텐츠 유형에 지정된 어떠한 기본 문자 세트보다도 우선합니다.

일반 사용자는 이 두 가지 기능 모두를 자원의 특성 페이지에서 사용할 수 있습니다.

문자 세트 조회

또한 IFile은 파일의 문자 세트를 조회하는 API도 정의합니다. 부울 플래그는 파일에 명시적으로 정의된 문자 세트만 리턴되어야 하는지 또는 내재된 문자 세트가 리턴되어야 하는지 여부를 지정합니다. 예를 들어,

	String charset = myFile.getCharset(false);

이는 문자 세트가 myFile에 명시적으로 설정되지 않은 경우에 널(null)을 리턴합니다. 그러나

	String charset = myFile.getCharset(true);

는 파일에 명시적으로 설정된 문자 세트가 있는지를 먼저 검사합니다. 아무 항목도 없는 경우 파일의 컨텐츠에 문자 세트에 대한 설명이 있는지 검사합니다. 아무 항목도 없는 경우 파일에 들어 있는 폴더 및 프로젝트에 문자 세트가 있는지 검사합니다. 아무 항목도 없는 경우 컨텐츠 유형 자체에 정의된 기본 문자 세트를 검사합니다. 마지막으로 기타 기본 문자 세트 지정이 없을 경우 플랫폼 기본 문자 세트를 검사합니다. 편리한 메소드인 getCharset()getCharset(true) 사용 시와 동일합니다.

작업공간에 있는 파일의 컨텐츠 유형

작업공간에 있는 파일의 경우, IFile은 파일 컨텐츠 설명을 확보하기 위한 API를 제공합니다.

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

이 API는 비록 클라이언트가 컨텐츠 유형을 판별하는 데만 관심이 있어도 사용해야 합니다. 컨텐츠 유형은 컨텐츠 설명에서 쉽게 확보할 수 있기 때문입니다. 컨텐츠 및 이름을 확보하고 컨텐츠 유형 사용에 설명된 대로 API를 사용하여 작업공간에서 파일을 설명하거나 컨텐츠 유형을 발견할 수 있지만 권장하지 않습니다. IFile.getContentDescription()을 사용한 컨텐츠 유형 판별에서는 프로젝트 속성과 프로젝트 특정 설정이 고려됩니다. 컨텐츠 유형 관리자로 바로 이동하면 이를 무시하는 것입니다. 그러나 더 중요한 것은 디스크에서 파일 컨텐츠을 읽는 데는 성능상 소비가 있기 때문입니다. 자원 플러그인은 작업공간에 있는 파일에 대해 컨텐츠 설명 캐시를 유지보수합니다. 이로써 컨텐츠 설명 댓가가 허용 가능한 수준으로 줄어듭니다.