Как я могу заставить XSLT возвращать UTF-8 в Java

Я пытаюсь заставить мой XSL-скрипт работать с кодировкой UTF-8. Персонажи, похожие на и греческие персонажи просто появляются как мусор. Единственный способ заставить его работать - записать результат в файл. Если я записываю его в выходной поток, он возвращает только мусор (System.out работает, но это может быть связано с тем, что он перенаправляется в файл).

Результат должен быть возвращен из сервлета, и обратите внимание, что это не проблема конфигурации сервлета. Я могу вернуть жестко закодированную строку с греческими символами из сервлета, и она отлично работает, так чтопроблема с преобразованием.

Вот мой текущий (упрощенный) код.

protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException,
IOException {
    try {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");

        final TransformerFactory factory = this.getFactory();

        final File inFile = new File("infile.xml");
        final File xslFile = new File("template.xsl");
        final File outFile = new File("outfile.html");

        final Templates templates = factory.newTemplates(new StreamSource(xslFile));
        final Transformer transformer = templates.newTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

        final InputStream in = new FileInputStream(inFile);
        final StreamSource source = new StreamSource(in);

        final StreamResult result1 = new StreamResult(outFile);
        final StreamResult result2 = new StreamResult(System.out);
        final ByteArrayOutputStream out = new ByteArrayOutputStream();
        final StreamResult result3 = new StreamResult(out);

        //transformer.transform(source, result1);
        //transformer.transform(source, result2);
        transformer.transform(source, result3);

        final Writer writer = response.getWriter();
        writer.write(new String(out.toByteArray()));
        writer.close();
        in.close();

    } catch (final TransformerConfigurationException e) {
        e.printStackTrace();
    } catch (final TransformerException e) {
        e.printStackTrace();
    }
}

Кроме того, мой XSL-скрипт содержит следующее


Как правильно заставить это работать? Я'Я использую Saxon для преобразования, если это могло бы помочь.

Ответы на вопрос(1)

Ваш ответ на вопрос