java - 想要在 XML 文件中遇到特殊的 UTF-8 字符时抛出异常

标签 java xml utf-8 character-encoding jaxb

我正在解析一个采用 UTF-8 编码的 XML 文件。

<?xml version="1.0" encoding="UTF-8"?>

现在我们的业务应用程序有一组由不同团队开发的组件,并且不使用相同的库来解析 XML。我的组件使用 JAXB,而其他一些组件使用 SAX 等等。现在,当 XML 文件具有特殊字符,如“ä”或“ë”或“é”(带有变音符号的字符)时,JAXB 会正确解析它,但其他组件(子应用程序)无法正确解析它们并抛出异常。

由于业务需要,我无法更改其他组件的编程,但我必须对我的应用程序进行限制/验证,以确保 XML(数据加载)文件不包含任何此类字符。

什么是确保文件不包含上述(或类似)字符的最佳方法,并且我可以在开始使用 JAXB 解析 XML 文件之前抛出异常(或给出错误)。

最佳答案

如果您的客户向您发送了一个 XML 文件,其中 header 的编码与文件内容不匹配,您不妨放弃尝试对该文件做任何有意义的事情。 - 他们真的发送 header 与实际编码不匹配的数据吗?那么,那不是 XML。而且您应该向他们收取更多费用;-)

简单地将文件作为 FileInputStream 逐字节读取。如果它包含负字节值,则拒绝处理它。

您可以保留 UTF-8 或 ISO 8859-1 等编码设置,因为它们都将 US-ASCII 作为适当的子集。

关于java - 想要在 XML 文件中遇到特殊的 UTF-8 字符时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994107/

相关文章:

java - 在 Eclipse 中自动用新导入覆盖旧导入

java - 64位VM不启动指针压缩,导致-8内存对齐

java - Firestore - 嵌套集合的自定义对象

php - Android 本地数据库通过 PHP 转换为 XML 到 mySql。

xml - 自定义 ATOM 提要复制了我在 Google 阅读器中的条目

php - UTF-8贯穿始终

html - 使用 UTF-8 不显示特殊字符 ">"

java - 使用 <c :forEach> with HashMap

java - 我可以从 xml 获取选定的标签并下载该值吗?

c++ - 在微 Controller 上编写 UART 控制台时的 UTF-8 问题