Подтвердить что ты не робот

DOMImplementationLS сериализуется в String в UTF-8 в Java

чтение документации для java org.w3c.dom.ls кажется, что элемент только может быть сериализован для строки с собственной строковой кодировкой java, UTF-16. Однако мне нужно создать строку UTF-8, экранированную или нет, я понимаю, что она все равно будет строкой UTF-16. У кого-нибудь есть идея обойти это? Мне нужно, чтобы строка передавалась в сгенерированный WS-клиент, который будет использовать String, тогда он должен быть UTF-8.

код, который я использую для создания строки:

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry.
DOMImplementationLS domImplementationLS = (DOMImplementationLS) REGISTRY.getDOMImplementation("LS");
LSSerializer writer = domImplementationLS.createLSSerializer();
String result = writer.writeToString(element);
4b9b3361

Ответ 1

Я считаю, что наиболее гибким способом сериализации DOM для String является использование API javax.xml.transform:

    Node node = ...
    StringWriter output = new StringWriter();

    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.transform(new DOMSource(node), new StreamResult(output));

    String xml = output.toString();

Это не особенно элегантно, но это должно дать вам лучший контроль над выходной кодировкой.

Ответ 2

Вы можете использовать DOMImplementationLS:

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry.
DOMImplementationLS domImplementationLS = (DOMImplementationLS)REGISTRY.getDOMImplementation("LS");
LSOutput lsOutput =  domImplementationLS.createLSOutput();
lsOutput.setEncoding("UTF-8");
Writer stringWriter = new StringWriter();
lsOutput.setCharacterStream(stringWriter);
lsSerializer.write(doc, lsOutput);     
String result = stringWriter.toString();