【发布时间】:2014-09-19 13:45:54
【问题描述】:
我正在解析一个具有 UTF-8 编码的 XML 文件。
<?xml version="1.0" encoding="UTF-8"?>
现在我们的业务应用程序有一组由不同团队开发的组件,并且没有使用相同的库来解析 XML。我的组件使用 JAXB,而其他一些组件使用 SAX 等等。现在,当 XML 文件具有特殊字符,如“ä”或“ë”或“é”(带有变音符号的字符)时,JAXB 会正确解析它,但其他组件(子应用程序)无法正确解析它们并引发异常。
由于业务需要,我无法更改其他组件的编程,但我必须对我的应用程序进行限制/验证,以确保 XML(数据加载)文件不包含任何此类字符。
什么是确保文件不包含上述(或类似)字符的最佳方法,并且我可以在开始使用 JAXB 解析 XML 文件之前在那里抛出异常(或给出错误)。
【问题讨论】:
-
听起来和你的问题一样简单 - 检查文件,如果它包含无效字符......如果你不能依赖标题信息,那么你必须自己对文件进行编码,看看它是否崩溃...您可以使用某种编码读取文件,请参阅stackoverflow.com/questions/3043710/…
-
您描述的行为实际上是不可能的除非您的 XML 状态为
encoding="UTF-8"而实际上不是,或者您提供给它的其他组件忽略了 XML声明并尝试将其解析为遗留编码(非常不可能)。我敢打赌第一种情况:您使用错误的编码创建 XML。更正声明以匹配您的文件编码,或将您的文件编码更正为 UTF-8。 为了说明这里的情况,我们需要来自受影响文件的十六进制 sn-p。 -
在此处查看另一篇相关帖子stackoverflow.com/questions/499010/…。
-
这是可能的,因为这些文件来自不同的客户,他们正在生成我们期望格式的 XML 文件,但可能只是放置 XML 标头而不考虑他们放入的数据。我们不确定是什么这些客户可能正在使用的工具和技术。
-
@MartinFrank 我不确定所有字符都会造成问题,因此最好确保该文件没有特殊字符。我只是在大声思考有没有办法针对所有非 ascii 字符验证文件?
标签: java xml utf-8 character-encoding jaxb