Frage

Unsere SAXParser hat die Bytereihenfolgemarkierung nicht ignorieren which am Start der Datei angezeigt wird.

Wie erhalte ich meine SAX-Parser die Bytereihenfolgemarkierung zu ignorieren?

War es hilfreich?

Lösung

Es sieht aus wie Sie utf-16 Eingang zu einem SAXParser werden kann geben, die nicht erwarten, utf-16 der Fall ist. Versuchen Sie, die Daten in utf-8 zu konvertieren, es könnte helfen.

Andere Tipps

Überprüfen Sie die Datei in einem Hex-Editor.

Wenn die ersten Bytes sind in der Tat durch das Dokument selbst gefolgt \xEF\xBB\xBF, dann ist es ein UTF-8-faux-BOM. Obwohl UTF-8 faux-Stücklisten ein Foul Unrichtigkeit und Werkzeuge, die sie mit spezieller Programmier Säure zerstört werden generieren müssen, hat die XML-Spezifikation erfordern Parser diese Byte-Sequenz zu erkennen und zu ignorieren, so dass, wenn Ihr SAX-Parser nicht es nicht kompatibel ist und braucht einige Tritte.

Wenn das erste Bytes, die Sie gibt  ist tatsächlich etwas wie eine von:

\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\xBB\xBF\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\x00\xBB\x00\xBF\x00
\xFF\xFE\xEF\x00\xBB\x00\xBF\x00

dann, was du hast ist ein versehentlicher Doppelcodierung. In diesem Fall müssen Sie Blick auf dem Programm die Datei produzieren, weil es nicht wohlgeformt ist, wäre ein SAX-Parser richtig zu beschweren, und andere Unicode-Zeichen in der Datei wahrscheinlich zu verkorkste würden. Möglicherweise ist es etwas albern wie Serialisierung, das Dokument zu einem Byte-String dann tun es durch eine falsche dekodieren / kodieren Zyklus zu senden.

So oder so, wenn Sie den Parser haben müssen, das lästige Bytefolge überspringt, würden Sie es mit einer Version füttern müssen Sie manuell diesen Präfix entfernen gehackt haben. Ohne zu wissen, was Sie SAX-Parser ist (oder sogar, was Sprache) es ist schwierig zu sagen, wie dies zu tun.

Vielleicht können Sie den Eingabestrom ein, bevor es an den Parser vorbei? Vielleicht können Sie die Datei in einen Byte-String lesen und weitergeben, das ersten Bytes geschoren, an den Parser? Wenn Ihr Parser Sie nicht diese Optionen nicht geben würden Sie die Datei in als Bytes geladen werden müssen, den Anfang Clip und speichern Sie es heraus wieder in eine neue Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top