[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"));