【问题标题】:Java stax: Invalid byte 2 of 3-byte UTF-8 sequenceJava stax:3字节UTF-8序列的无效字节2
【发布时间】:2020-04-02 11:47:20
【问题描述】:

我正在尝试使用 stax 解析 xml,但我得到的错误是:

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,64]
Message: Invalid byte 2 of 3-byte UTF-8 sequence.

我已经尝试查找它,但找不到解决方案。我必须解析的代码是:

public List<Vild> getVildData(File file){
    XMLInputFactory factory = XMLInputFactory.newFactory();
    try {
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(Files.readAllBytes(file.toPath()));
        XMLStreamReader reader = factory.createXMLStreamReader(byteArrayInputStream);
        List<Vild> vild = saveVild(reader);
        reader.close();
        return vild;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XMLStreamException e) {
        e.printStackTrace();
    }
    return Collections.emptyList();
}
private List<Vild> saveVild(XMLStreamReader streamReader) {
    List<Vild> vildList = new ArrayList<>();
    try{
        Vild vild = new Vild();
        while (streamReader.hasNext()) {
            streamReader.next();
            //Creating list with data
        }
    }catch(XMLStreamException | IllegalStateException ex) {
        ex.printStackTrace();
    }
    return Collections.emptyList();
}

我已经尝试了我在网上找到的以下内容:

XMLStreamReader reader = factory.createXMLStreamReader(byteArrayInputStream,"UTF-8");

但这没有用。有人知道这个问题的解决方案吗?

【问题讨论】:

  • 我认为您的文件的实际编码与您的 XML 开头声明的编码之间可能存在问题。您有办法显示此文件中的内容吗?尤其是一开始的&lt;?xml ?&gt; 声明,第8行是什么?
  • 在第 8 行,它被塞进了 ë 但是当我将它更改为 latin-1 或 ansi 时,一个消失了,而是得到了这个:javax.xml.stream.XMLStreamException: ParseError at [row, col]:[414,47] 消息:对实体“R”的引用必须以 ';' 结尾分隔符。在那条线上,它卡在了 P&R
  • 您在哪里更改了编码?在 XML 声明中,或在保存 XML 文件时(物理上)。此外, & 必须 用 & 转义。在 XML 中,但它是单独的问题,与编码无关。
  • 我最终通过将其更改为以下行来解决它:factory.createXMLStreamReader(byteArrayInputStream, "iso8859-1");。所以在java代码本身内部
  • “P&R”不是有效的 XML。你能改变这个“几乎是 XML”文件的生成方式,使它真正遵循所有需要的规则吗? - 我看到你为这个新问题打开了一个新问题,这很好

标签: java xml xml-parsing stax


【解决方案1】:

您的 XML 文件未以 UTF-8 编码。尝试找出编码是什么。

例如,如果编码结果是“latín 1”,则在创建 xml 阅读器时使用它:

XMLStreamReader reader = factory.createXMLStreamReader(byteArrayInputStream,"ISO8859-1")

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 2011-01-26
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多