Java 设置xml编码

Java 设置xml编码,java,xml,Java,Xml,我将xml发送到web服务,并在那里将输入xml转换为字符串,现在设置其编码时遇到问题。下面是一个代码: Element soapinElement = (Element) streams.getSoapin().getValue().getAny(); Node node = (Node) soapinElement; Document document = node.getOwnerDocument(); D

我将xml发送到web服务,并在那里将输入xml转换为字符串,现在设置其编码时遇到问题。下面是一个代码:

        Element soapinElement = (Element) streams.getSoapin().getValue().getAny();          
        Node node = (Node) soapinElement;
        Document document = node.getOwnerDocument();
        DOMImplementationLS domImplLS = (DOMImplementationLS) document.getImplementation();         
        LSSerializer serializer = domImplLS.createLSSerializer();
        LSOutput output = domImplLS.createLSOutput();
        output.setEncoding("UTF-8");
        Writer stringWriter = new StringWriter();
        output.setCharacterStream(stringWriter);
        serializer.write(document, output);    
        String soapinString = stringWriter.toString();
此代码从请求xml生成一个字符串。问题在于,当请求XML不是以UTF-8编码时,它会在XML元素中生成不可读的字符:

<some element>РћР’Р” Р’РћР</some element>

当我发送UTF-8编码的xml时,没有问题。因此,问题是如何在将xml转换为字符串时设置UTF-8编码


JVM使用的默认编码是ISO8859-1。

如果我是你,我会重新考虑我的整个方法,通常XML应该作为一棵树保存

但是如果你真的需要字符串,试试这个

    final StringWriter sw = new StringWriter();
    try {
        TransformerFactory.newInstance().newTransformer().transform(
                new DOMSource(document),
                new StreamResult(sw)
        );
    } catch (TransformerException e) {
        throw new RuntimeException(e);
    }

    // Now you have the XML as a String:
    System.out.println(sw.toString());

setEncoding
方法说明了实际编码是什么,而不是您想要的编码。XML库不会转换字符

见这个问题:


如果您想转换编码,那是另一个问题。

我很困惑。你解决问题了吗?你是在问问题还是只是告诉我们你已经通过将编码设置为UTF-8解决了问题?默认字符编码并不总是ISO-8859-1;默认值取决于您的系统。