DOMImplementationLS 在 Java 中的 UTF-8 中序列化为 String

2022-09-04 00:51:34

阅读java的文档 org.w3c.dom.ls 似乎只有元素才能被序列化为具有java本机字符串编码UTF-16的字符串。但是,我需要创建一个UTF-8字符串,转义或其他什么,我知道它仍然是UTF-16字符串。有人有想法解决这个问题吗?我需要将字符串传递到将使用字符串的生成的WS客户端,然后它应该是UTF-8。

我用来创建字符串的代码:

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

答案 1

您仍然可以使用: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();

答案 2

我发现将DOM序列化为字符串的最灵活方法是使用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();

它不是特别优雅,但它应该让你更好地控制输出编码。