xml analysiert Fehler bei ungültigem Zeichen

8

SO, ich frage als letzten Ausweg, da ich völlig aus Ideen bin.

Ich habe eine Windows ASP.NET ASMX-Webservice-App, die ein serialisiertes Person-Objekt mit einem - Name, Adresse, E-Mail ... usw.

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

googeln Sie diese Zeichen Ich sehe, dass es sich um die Windows-1252-Codierung handelt.

Das Problem tritt beim Parsen des XML auf, ich habe festgestellt, 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?

    
bushman 28.06.2010, 23:50
quelle

1 Antwort

7

Der Parser ist korrekt, unabhängig davon, ob die Serialisierung falsch ist. Wie bei den meisten C0 / C1-Steuerzeichen ist es ungültig - eigentlich schlimmer als das: nicht wohlgeformt -, um ein U zu setzen + 001A SUBSTITUTE in eine XML 1.0-Datei (*), auch wenn sie als Zeichenreferenz wie  kodiert ist.

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

Eigentlich habe ich keine Ahnung, wie das Zeichen (oft verwendet, um das Dateiende in alten schrecklichen Betriebssystemen zu markieren) in den von einer ASP.NET-App verwendeten Dataset gelangen würde, aber es scheint nicht gültig zu sein 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 durch XML durchlaufen müssen, müssen Sie XML 1.1 verwenden. Dies kann jedoch zu Kompatibilitätsproblemen mit ältere XML-Parser, und Sie können immer noch nicht das U + 0000 NULL-Zeichen verwenden, so dass Sie nie vollständig binär-sicher sein werden.)

    
bobince 29.06.2010, 00:30
quelle

Tags und Links