加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JAXB错误的说明:1字节UTF-8序列的字节1无效

发布时间:2020-12-14 19:11:28 所属栏目:Java 来源:网络整理
导读:我们正在使用JAXB解析XML文档并收到此错误: [org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence.]at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315) 这究竟是什么

我们正在使用JAXB解析XML文档并收到此错误:

[org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)

这究竟是什么意思,我们如何解决这个问题?

我们正在执行以下代码:

jaxbContext = JAXBContext.newInstance(Results.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setSchema(getSchema());
results = (Results) unmarshaller.unmarshal(new FileInputStream(inputFile));

更新

问题似乎是由于XML文件中的这个“有趣”字符:?

为什么会导致这样的问题?

更新2

文件中有两个奇怪的字符.它们位于文件的中间.请注意,该文件是基于数据库中的数据创建的,并且这些奇怪的字符以某种方式进入数据库.

更新3

这是完整的XML代码段:

更新4

请注意,没有<?xml ...?>头.

特殊字符的HEX是BF

最佳答案
所以,问题在于JAXB在没有<?xml ...?>的情况下处理XML文件.标题为UTF-8,当您的文件使用其他一些编码时(可能是ISO-8859-1或Windows-1252,如果0xBF字符实际上意味着?).

如果您可以更改文件的制作者,可以添加<?xml ...?>标头与实际编码规范,或只是使用UTF-8写入文件.

如果您无法更改生成器,则必须使用具有显式编码规范的InputStreamReader,因为(遗憾的是)JAXB不允许更改其默认编码:

results = (Results) unmarshaller.unmarshal(
   new InputStreamReader(new FileInputStream(inputFile),"ISO-8859-1")); 

但是,这个解决方案很脆弱 – 它输入文件失败了<?xml ...?>标头具有不同的编码规范.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读