Kodowanie plików i typy treści

Moduł dodatkowy środowiska wykonawczego platformy definiuje infrastrukturę umożliwiającą definiowanie i wykrywanie typów treści dla strumieni danych (przegląd struktury treści można znaleźć w sekcji Typy treści). Istotnym elementem systemu typów treści jest możliwość określania różnych rodzajów kodowania (zestawów znaków) na potrzeby różnych rodzajów treści. Interfejs API zasobów pozwala również na ustawianie domyślnych zestawów znaków dla projektów, folderów i plików. Domyślne zestawy znaków są używane w sytuacji, gdy sama treść pliku nie definiuje konkretnego kodowania w obrębie swojego strumienia danych.

Ustawianie zestawu znaków

Tak jak opisano to w sekcji Typy treści, istnieje możliwość ustawiania domyślnego kodowania plików dla różnych typów treści. Bardziej precyzyjne sterowanie możliwe jest przy użyciu interfejsu API zasobów.

Interfejs IContainer definiuje protokół służący do ustawiania domyślnego zestawu znaków dla określonego projektu lub folderu. Daje to modułom dodatkowym (a ostatecznie użytkownikom) większą swobodę pod względem określania odpowiedniego zestawu znaków dla zbioru plików, gdy zestaw domyślny przypisany do danego typu treści okaże się nieodpowiedni.

Interfejs IFile definiuje interfejs API służący do ustawiania domyślnego zestawu znaków dla określonego pliku. Zestaw ten zostanie użyty, jeśli w obrębie pliku nie zostało określone inne kodowanie. Domyślny zestaw znaków przypisany do pliku ma priorytet nad innymi domyślnymi zestawami znaków określonymi dla folderu, projektu lub typu treści.

Obie opisane funkcje są dostępne dla użytkownika końcowego na stronie właściwości zasobu.

Generowanie zapytań o zestaw znaków

Interfejs IFile definiuje również interfejs API służący do generowania zapytań dotyczących zestawu znaków pliku. Flaga boolowska określa, czy zwracany ma być wyłącznie zestaw znaków jawnie zdefiniowany dla danego pliku, czy też domyślny zestaw znaków. Na przykład:

	String charset = myFile.getCharset(false);

zwraca wartość NULL, jeśli dla pliku myFile nie ustawiono jawnie żadnego zestawu znaków. Jednak

	String charset = myFile.getCharset(true);

spowoduje najpierw sprawdzenie zestawu znaków jawnie ustawionego dla danego pliku. W razie nieodnalezienia takiego zestawu treść pliku zostanie przeszukana pod kątem opisu zestawu znaków. Jeśli opis ten nie zostanie odnaleziony, rozpocznie się wyszukiwanie domyślnego zestawu znaków w folderach i projektach zawierających ten plik. Jeśli nie zostanie odnaleziony, sprawdzony zostanie domyślny zestaw znaków zdefiniowany dla samego typu treści. W razie nieodnalezienia żadnych innych oznaczeń domyślnego zestawu znaków, zwrócony zostanie domyślny zestaw znaków platformy. Gotowa do użycia metoda getCharset() ma ten sam skutek, co zastosowanie metody getCharset(true).

Typy treści dla plików w obszarze roboczym

Interfejs IFile udostępnia interfejs API umożliwiający uzyskanie opisu treści plików z obszaru roboczego:

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

Ten interfejs API powinien być używany nawet wtedy, gdy klienci są tylko zainteresowani ustaleniem typu treści, ponieważ może on być w łatwy sposób pobrany z opisu treści. Wykrycie typu treści lub plików opisu w obszarze roboczym można wykonać przez pobranie treści i nazwy oraz użycie interfejsu API opisanego w sekcji Korzystanie z typów treści, ale nie jest to sposób zalecany. Określenie typu treści przy użyciu metody IFile.getContentDescription() uwzględnia natury projektu i ustawienia specyficzne dla projektu. Bezpośrednie przejście do menedżera typu treści spowoduje zignorowanie tych elementów. Ale co ważniejsze, odczytywanie treści plików z dysku jest kosztowną operacją. Moduł dodatkowy obsługi zasobów przechowuje w pamięci podręcznej opisy treści plików środowiska roboczego. Ogranicza to koszt uzyskania opisu treści do poziomu, który można zaakceptować.