【问题标题】:  in XML making it unparseable在 XML 中使其无法解析
【发布时间】:2021-05-07 19:33:20
【问题描述】:

所以我的数据库中有一个值,其中包含  形式的不间断空格。我有一个遗留服务,它从数据库中读取这个字符串并使用这个字符串创建一个 XML。我面临的问题是为此消息返回的 XML 是不可解析的。当我在记事本 ++ 中打开它时,我看到字符 xA0 代替了不间断空格,并且在删除此字符后,XML 变得可解析。此外,我有来自同一服务的此 XML 文件的旧版本,其中字符 "Â " 代替了非中断空间。我最近更改了运行该服务的tomcat服务器,因此出现了问题。我发现了这个post,据此我的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 文件的旧版本中存在 "Â "。

这是记事本++中问题字符的图像 image in notepad++

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

新信息 - 使用 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 强制执行 UTF-8 不起作用我仍然在我的 XML 中获得 xA0。

【问题讨论】:

  • 其他字符编码是否正确,或者这是一个更普遍的编码问题? (我怀疑是后者)
  • 其他字符好像没问题,只是非换行空格字符有问题。
  • 所以像变音符号ÄÖÜäöü 这样的字符可以正常工作吗? (只是选择它们,因为我已经在我的键盘上准备好了它们 ;-) 根据您的环境,其他测试字符串可能更容易创建)。
  • 我想知道强制编码是否有帮助? transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  • 我目前无法访问数据库,因此我无法检查这些测试字符串。但是我想再次强调的问题是,为什么 xa0 会使 XML 不可解析? xa0 是 UTF-8 中 nbsp 的正确字符吗?在旧版本中使 nbsp "Â " 的编码是什么?

标签: java xml encoding utf-8 iso-8859-1


【解决方案1】:

问题是我的 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();
        }

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多