Fájlkódolás és tartalomtípusok

A platform futási bedolgozó megad egy infrastruktúrát a tartalomtípusok adatfolyamokhoz megadásához és felfedezéséhez. (A tartalom-keretrendszer áttekintését a Tartalomtípusok rész tartalmazza.) A tartalomtípus-rendszer fontos része, hogy megadhatók különböző kódolások (karakterhalmazok) a különböző típusú tartalomhoz. Az erőforrások API lehetővé teszi alapértelmezett karakterkészlet létrehozását a projektekhez, mappákhoz és fájlokhoz. Ezek az alapértelmezett karakterkészletek átnézésre kerülnek, ha a fájltartalom maga nem ad meg egy adott kódolást az adatfolyamon belül.

Karakterkészlet beállítása

A Tartalomtípusok részben láttuk, a tartalomtípusokhoz alapértelmezett fájlkódolások adhatók meg. Az erőforrások API még finomabban szabályozható vezérlést biztosít.

IContainer megad egy protokollt az alapértelmezett karakterkészlet adott projekthez vagy mappához beállításához. Ez a bedolgozók (és végül a felhasználó) számára nagyobb szabadságot biztosítanak a fájlok megfelelő karakterkészleteinek beállításához, ha a tartalomtípus alapértelmezett karakterkészlete nem megfelelő.

IFile megad egy alkalmazás programozási felületet az adott fájl alapértelmezett karakterkészletének megadásához. Ha nincs kódolás megadva a fájltartalmon belül, akkor ez a karakter kerül használatra. A fájl alapértelmezett karakterkészletének elsőbbsége van a fájl mappájában, projektjében vagy tartalomtípusában megadott alapértelmezett karakterkészlettel szemben.

Ezek a szolgáltatások rendelkezésre állnak a végfelhasználó számára az erőforrás adatlapján.

A karakterkészlet lekérdezése

IFile alkalmazás programozási felületet ad meg a fájl karakterkészletének lekérdezéséhez. A logikai jelző megadja, hogy csak a fájlhoz explicit módon megadott karakterkészletet kell-e visszaadni, vagy egy magában foglalt karakterkészletet. Például:

	String charset = myFile.getCharset(false);

nullát ad vissza, ha nincs explicit módon karakterkészlet beállítva a myFile elemen. A

	String charset = myFile.getCharset(true);

először megkeresi a fájlon explicit módon beállított karakterkészletet. Ha egyet sem talál, akkor a fájl tartalmában megkeresi a karakterkészlet leírását. Ha nem talál ilyet, akkor a fájlt tartalmazó mappákban és projektekben keresi az alapértelmezett karakterkészletet. Ha nem talál ilyet, akkor a tartalomtípushoz megadott alapértelmezett karakterkészlet kerül ellenőrzésre. És végül a platform alapértelmezett karakterkészlete kerül visszaadásra, ha nincs másik alapértelmezett karakterkészlet megjelölés. A megfelelő getCharset() metódus megegyezik a getCharset(true) használatával.

A munkaterületen lévő fájlok tartalomtípusa

A munkaterületen lévő fájlokhoz az IFile egy alkalmazás programozási felületet biztosít a fájltartalom-leírás lekéréséhez:

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

Ezt az alkalmazás programozási felületet akkor kell használni, ha az ügyfelek csak a tartalomtípus meghatározásában érdekeltek - a tartalomtípus egyszerűen lekérhető a tartalomleírásból. A munkaterületen lévő tartalomtípus és leírófájlok úgy deríthetők fel, ha a Tartalomtípusok használata részben leírt API segítségével lekéri a tartalmat és a nevet, de ez nem javasolt. Az IFile.getContentDescription() segítségével végzett tartalomtípus-meghatározás a projektjellemzőket és a projektspecifikus beállításokat veszi figyelembe. Ha közvetlenül a tartalomtípus-kezelőre ugrik, akkor ezt figyelmen kívül hagyja. De ami még fontosabb, hogy a fájlok tartalmának lemezről olvasása nagyon drága. Az Erőforrások bedolgozó a munkaterületen lévő fájlokhoz fenntart egy tartalomleírás-gyorsítótárat. Ez elfogadható szintre csökkenti a tartalomleírás költségét.