Sagen SAX-Parser ignorieren ungültige Zeichen?
SAX hält im sterben auf die folgende Ausnahme:
Invalid byte 2 of 3-byte UTF-8 sequence
Das problem ist meistens korrekt UTF-8 kodiert, aber es gibt ein paar Fehler drin. Wir können nicht eine neue version der Datei haben wir diese Datei verwenden.
So, wie wir sagen, SAX zu ignorieren ungültiges Zeichen-Sequenzen, oder reinigen Sie die UTF-8-Datei, so dass Sie nicht haben, ungültige UTF-8-Sequenzen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, dass Sie bereinigen die Datei als komplett separaten Schritt von der Analyse es als XML.
UTF-8 ist eine relativ einfache Codierung zu verstehen; diese web-Seite zeigt, wie UTF-8 gemeint ist, gebildet werden. Ich schlage vor, Sie schreiben ein Programm, das liest die Eingabedatei und schreibt eine neue Datei. Er liest byte für byte, nur schreiben ein Charakter, wenn er sieht, dass es rechtskräftig gebildet. Wenn es erkennt eine ungültige byte, es würde zu schreiben, die den string "UTF8ERROR" oder in einer anderen leicht auffindbaren token, das würde nicht auftreten, natürlich in den input-Daten. Es würde dann überspringen Sie den rest des Charakters.
Danach können Sie prüfen, wo die Fehler aufgetreten sind und beheben Sie die Daten... dann analysieren und es als "normal".
Diese Weise werden Sie sehen, wie weit verbreitet der Fehler ist, zu sehen, ob es irgendein Muster zu Ihnen, und die potenziell in der Lage sein, um Sie zu korrigieren. Wenn du gehst zu erhalten, weitere Daten aus der gleichen Quelle, würde ich Sie ermutigen, um Ihnen zu sagen, über die Frage... kann es ein größeres problem geben auf Ihrer Seite.
Könnten Sie filtern den Datenstrom, bevor SAX liest es.
Erstellen Sie ein InputStream liest den stream und löscht ungültige Zeichen.
SAX (und andere XML-tools) werden entwickelt, um auf gut gebildet (oder, wenn erforderlich, valid) XML. Sie absichtlich werfen Fehler oder Ausnahmen, wenn der Eingang ist nicht gut gebildet, einschließlich der Nichteinhaltung einer Codierung. So wie die anderen Antworten haben Ihnen vorgeschlagen, einen separaten Schritt zum bereinigen der Eingabe.
(Ähnlich wie SAX wirft Fehler mit HTML nicht wohlgeformt XML, wie fehlende end-tags).
Ich denke, das wird nicht viel helfen, aber vielleicht andere möchten wissen:
Vor kurzem habe ich die gleiche Ausnahme beim abrufen einer UTF-8-XML-Datei, die serviert wurde mit ISO-8859-1-Header. Die Lösung war die angeben, UTF-8 manuell über String.getBytes(charset):
BEARBEITEN: .. oder noch einfacher:
Konnte verwenden Sie java.nio.charset.CharsetDecoder zusammen mit InputStreamReader(InputStream in, CharsetDecoder dec) irgendwie?
(aus der CharsetDecoder javadoc)