2010-06-28 8 views
8

SO frage ich als letztes Mittel, da ich völlig aus Ideen bin.xml Parse Fehler auf illegale Zeichen

ich ein Windows ASP.NET ASMX Web Services App, die ein serialisierte Person-Objekt mit einer zurückgibt -,, Adresse, E-Mail ... etc

aber einige Attribute in der XML kodiert sind sehr weirdly Namen zum Beispiel-&#x1a (Ich weiß nicht, wo die Codierung stattfindet. Ich nehme an in der Serialisierung)

googling those characters Ich sehe, dass es "Windows-1252" Codierung ist.

Das Problem tritt beim Parsen der XML, fand ich, einen Parse-Fehler von "ungültigen Unicode-Zeichen" an der Position der 1252-Codierung.

Wie kann ich es erfolgreich analysieren? Welche Lösungen schlagen Sie vor?

Antwort

7

Der Parser ist korrekt, was auch immer erzeugt die Serialisierung ist falsch. Wie bei den meisten C0/C1-Steuerzeichen ist es ungültig - eigentlich schlechter als: nicht wohlgeformt -, eine U+001A SUBSTITUTE in eine XML 1.0-Datei (*) zu schreiben, selbst wenn sie als Zeichenreferenz wie  codiert ist.

Kein XML-Parser wird dies lesen, noch sollte es. Während Sie einen schrecklichen Hack einstecken könnten, um zu versuchen,  Sequenzen herauszufiltern, bevor Sie sie an den Parser übergeben, würden solche rohen Hacks für den allgemeinen Fall nicht funktionieren. Der Serialiser sollte repariert werden, um die Produktion zu stoppen.

Eigentlich habe ich keine Ahnung, wie das Zeichen (oft verwendet, um das Ende der Datei in alten schrecklichen Betriebssystemen zu markieren) würde in den Datensatz von einer ASP.NET-App verwendet werden, aber es scheint nicht zu spielen gültige Rolle in einem Namen, einer Adresse oder einer E-Mail. Vielleicht müssen Sie wirklich auf die Reinigung Ihrer Daten schauen.

(*: Es wäre legal, wenn es als Zeichenreferenz in einem XML 1.1-Dokument codiert wäre. Wenn Sie Steuerzeichen unbedingt über XML durchlaufen müssen, müssen Sie XML 1.1 verwenden. Dies kann jedoch zu Kompatibilitätsproblemen führen mit älteren XML-Parsern, und Sie können immer noch nicht das U + 0000 NULL-Zeichen verwenden, so dass Sie nie vollständig binär-sicher sein werden.)

+0

Vielen Dank für Ihre detaillierte Antwort - ich nehme an, die Daten waren als Kopie einfügen aus einer Word-Datei oder etwas dieser Art eingegeben. – bushman

+0

Ja, das wäre für die C1-Steuercodes im Bereich 0x80-0x9F üblich (normalerweise von der Code-Seite 1252 intelligente Anführungszeichen falsch interpretiert als ISO-8859-1), aber der 0x1A-Steuercode wird für nichts durch verwendet Word oder jede andere übliche moderne Windows-App, die ich mir vorstellen kann. – bobince

+0

so bob, ich habe keine Kontrolle über die Daten, wie es zu mir kommt - ist der einzige Weg, um diesen schrecklichen Hack zu haben und es aus der Zeichenfolge zu entfernen oder gibt es eine andere Möglichkeit, es zu repräsentieren - zum Beispiel vor der Serialisierung - - Überprüfen Sie, ob die Zeichenfolge UTF-8 zulässig ist. – bushman