Wie kann ich XSLT dazu bringen, UTF-8 in Java zurückzugeben?

Ich versuche, mein XSL-Skript für die UTF-8-Codierung zu aktivieren. Charaktere wie åäö und griechische Charaktere tauchen wie Müll auf. Die einzige Möglichkeit, es zum Laufen zu bringen, besteht darin, das Ergebnis in eine Datei zu schreiben. Wenn ich es in einen Ausgabestream schreibe, gibt es nur Garbage zurück (System.out funktioniert, aber das kann daran liegen, dass es in eine Datei umgeleitet wird).

Das Ergebnis muss von einem Servlet zurückgegeben werden. Beachten Sie, dass es sich nicht um ein Problem mit der Servlet-Konfiguration handelt. Ich kann eine fest codierte Zeichenfolge mit griechischen Zeichen aus dem Servlet zurückgeben, und sie funktioniert einwandfrei. Es ist also ein Problem bei der Umwandlung.

Hier ist mein aktueller (vereinfachter) Code.

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();
    }
}

Außerdem enthält mein XSL-Skript Folgendes

<xsl:output method="html" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

Was ist der richtige Weg, um dies zum Laufen zu bringen? Ich benutze Saxon für die Transformation, wenn das hilfreich sein könnte.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage