Java stax: Неверный байт 2 3-байтовой последовательности UTF-8 - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь проанализировать xml, используя stax, но получаю ошибку:

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

Но это не сработало. Кто-нибудь знает решение этой проблемы?

1 Ответ

1 голос
/ 02 апреля 2020

Ваш XML файл не закодирован в UTF-8. Попытайтесь выяснить, что такое кодировка.

Если кодировка оказывается, например, "latín 1", используйте ее при создании считывателя xml:

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