Java 设置xml编码
我将xml发送到web服务,并在那里将输入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
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;默认值取决于您的系统。