Проблема кодирования XML-преобразования - PullRequest
0 голосов
/ 09 августа 2011

Привет, у меня есть простой код:

    InputSource is = new InputSource(new StringReader(xml))
    Document d = documentBuilder.parse(is)
    StringWriter result = new StringWriter()
    DOMSource ds = new DOMSource(d)
    Transformer t = TransformerFactory.newInstance().newTransformer()
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    t.setOutputProperty(OutputKeys.STANDALONE, "yes");
    t.setOutputProperty(OutputKeys.ENCODING,"UTF-16")
    t.transform(ds,new StreamResult(result))
    return result.toString()

, который должен преобразовывать кодировку xml в UTF-16. Хотя внутреннее представление String в jvm уже использует символы UTF-16, насколько я знаю, но я ожидаю, что в результате String должен содержать заголовок, для которого задана кодировка "UTF-16", originla xml, где это был UTF-8 но я получаю:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

(также похоже, что автономное свойство неверно) Экземпляр преобразователя: com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl (что я думаю по умолчанию) Так чего мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Используйте устройство записи, где вы явно объявляете UTF-16 в качестве выходной кодировки.Попробуйте OutputStreamWriter(OutputStream out, String charsetName), который должен обернуть ByteArrayOutputStream и посмотрите, работает ли он.

0 голосов
/ 11 августа 2011

Я написал тест самостоятельно. С одним незначительным изменением:

 t.transform(ds,new StreamResult(new File("dest.xml")));

У меня те же результаты , но файл действительно в кодировке UTF-16, проверяется с помощью шестнадцатеричного редактора. По какой-то странной причине объявление xml не изменилось. Итак, ваш код работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...