Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java stax:3字节UTF-8序列的字节2无效_Java_Xml_Xml Parsing_Stax - Fatal编程技术网

Java stax:3字节UTF-8序列的字节2无效

Java stax:3字节UTF-8序列的字节2无效,java,xml,xml-parsing,stax,Java,Xml,Xml Parsing,Stax,我试图使用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 =

我试图使用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();
}

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

您的XML文件没有用UTF-8编码。试着找出编码是什么

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

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

我认为文件的实际编码与XML开头声明的编码之间可能存在问题。你有办法显示这个文件中的内容吗?特别是最开始的
声明,第8行是什么?第8行是tuck onë,但当我将其更改为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”文件的生成方式,使其实际遵循所有必需的规则我看到你为这期杂志提出了一个新问题,很好
XMLStreamReader reader = factory.createXMLStreamReader(byteArrayInputStream,"ISO8859-1")