在 XML 中使其无法解析



所以我在我的数据库中有一个值,它在 的形式中有一个非断点空间。我有一个遗留服务,它从数据库中读取这个字符串,并使用这个字符串创建XML。我面临的问题是,为该消息返回的XML是不可解析的。当我在notepad++中打开它时,我看到字符xA0在非断行空格的位置,并且在删除该字符后,XML变得可解析。此外,我还有来自同一服务的这个XML文件的旧版本,其中字符"Â "代替了非分隔空间。我最近更改了运行该服务的tomcat服务器,因此出现了一些问题。我发现这篇文章根据我的XML被编码为ISO-8859-1;,但我用来将XML转换为字符串的代码不使用ISO-8859-1;。下面是我的代码

private String nodeToString(Node node) {
StringWriter sw = new StringWriter();
try {
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
t.transform(new DOMSource(node), new StreamResult(sw));

} catch (TransformerException te) {
LOG.error("Exception during String to XML transformation ", te);
}
return sw.toString();
}

我想知道为什么我的XML是不可解析的,为什么有一个"Â "在旧版本的XML文件。

这是notepad++中有问题字符的图像notepad++中的图像

当我在记事本中打开XML并尝试保存它时,我看到编码类型是ANSI,当我将其更改为UTF-8然后保存它时,XML变得可解析。

新信息-强制UTF-8与transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");没有工作,我仍然得到xA0在我的XML。

问题是我的java版本以某种方式将我的文件保存为ANSI文件格式。当我在记事本中打开文件并试图保存它时,我看到了这一点。旧的文件是UTF-8格式的。所以我所做的就是在写文件时指定UTF-8编码。

Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileName.trim()), StandardCharsets.UTF_8));
try {
out.write(data);
} finally {
out.close();
}

相关内容

  • 没有找到相关文章

最新更新