Invalid byte 1 of 1-byte UTF-8 sequence
The input is read as UTF-8 but contains bytes that are not valid UTF-8.
Invalid byte 1 of 1-byte UTF-8 sequence.
Why it happens
- A file saved as Windows-1252 or ISO-8859-1 without an
encodingin the XML declaration, so the parser assumes UTF-8. Typographic quotes and dashes from Word are the usual culprits. - XML built in Java with
String.getBytes()or aFileWriterusing the platform charset, then parsed as UTF-8. - A declaration that says UTF-8 on a file that isn't.
How to fix it
Make the declaration match the bytes: save the file as UTF-8, or declare the encoding it really has (<?xml version="1.0" encoding="windows-1252"?>). In Java, write with an explicit charset (getBytes(StandardCharsets.UTF_8), Files.newBufferedWriter(path, UTF_8)). Invalid byte 2 of 3-byte UTF-8 sequence is the same problem.
Java's schema validation (javax.xml.validation.Validator, and JAXB or Spring on top of it) throws at the first error unless you set an ErrorHandler whose error() records the SAXParseException and carries on; each one has getLineNumber() and getColumnNumber(). A well-formedness error ends parsing whatever the handler does.
The same problem in xmlvalid
xmlvalid validates with libxml2, which reports it as Invalid bytes in character encoding. It checks the whole document in your browser and lists every schema error with its line and column, not only the first.
Invalid bytes in character encoding
Example
<note>it\x92s here</note>
<note>it’s here</note>