Приклад: В
Якщо XSLT-процесор не знає зазначеної кодування, то він повинен або видати помилку або використовувати UTF-8 (або UTF-16). Якщо формується HTML, то XSLT-процесор повинен додати тег meta, в якому буде вказана реально використана кодування:
В
Всі б добре, але деякі XSLT-процесори не підтримують даний тег (по специфікації вони і не зобов'язані). Зокрема пакет Cocoon його не підтримує, т.к. за словами розробників він суперечить внутрішній архітектурі цього пакета. Замість цього там підтримується вказівку вихідного формату за допомогою інструкції препроцесора cocoon-format. Приклад вставки цієї інструкції в XSL:
В
type = "text/html"
В
Таким чином можна динамічно змінювати вихідний формат. Якщо це не потрібно, то можна записати інструкцію і статично (у вихідному XML-документі):
В
Власне використовувана кодування налаштовується для кожного формату окремо у файлі cocoon.properties. p> Нова версія Cocoon 2.0 крім керування кодуваннями дозволяє зробити в плані локалізації вже гараздо більше. Подробиці Ви можете дізнатися на їх сайті. p> У разі використання JAXP для генерації вихідного потоку (пакет javax.xml.transform) крім використання тега xsl: output можна використовувати методи setOutputProperty об'єкта Transformer. Приклад збереження документа в належним кодуванням:
TransformerFactory trFactory = TransformerFactory.newInstance ();
Transformer transformer = trFactory.newTransformer ();
transformer.setOutputProperty (OutputKeys.DOCTYPE_PUBLIC, docPublic);
transformer.setOutputProperty (OutputKeys.DOCTYPE_SYSTEM, docSystem);
transformer.setOutputProperty ( OutputKeys.INDENT, "yes");
transformer.setOutputProperty ( OutputKeys.ENCODING, encoding);
OutputStream os = ...;
StreamResult result = new StreamResult (os);
transformer.transform ( source, result);
Тут є один підводний камінь - реалізація Transformer повинна підтримувати потрібну кодування. Xalan зі складу JDK 1.4.0_x і 1.4.1_x підтримує тільки дві російські кодування - KOI8-R та ISO-8859-5. Якщо хочеться використовувати Windows-1251, то можна скористатися механізмом endorsed:
Створюєте каталог% JAVA_HOME% jrelibendorsed p> Копіюєте туди jar з пропатченний класом: XalanRusChars.jar
У JDK 1.4.2 Beta включена нова версія Xalan, яка ніби як вже підтримує кодування 1251. p> FOP p> Пакет FOP призначений для обробки документів за стандартом XSL FO (Formating Objects). Зокрема він дозволяє створювати PDF-документи на базі документів XML. Для перетворення з вихідного XML в FO пакет FOP за замовчуванням використовує XSLT-процесор Xalan в парі з Xerces. Для створення підсумкового зображення в FOP необхідно підключити шрифти, що підтримують російські букви. Ось як можна проробити це для версії 0.20.1:
У підкаталог conffonts (наприклад, в c: fop-0.20.1conffonts) скопіювати файли ttf з системного каталогу Windows. Д...