2010-06-28 16 views
8

SO, sto chiedendo come ultima risorsa, dato che sono completamente fuori di idee.errore di analisi xml sul carattere illegale

Ho un servizio Web App di Windows ASP.NET ASMX che restituisce un oggetto Person serializzato con un - nome, indirizzo, e-mail ... ecc

ma alcuni attributi nel codice XML sono codificati molto stranamente, ad esempio- &#x1a (non so dove si verifica la codifica.) Presente nel processo di serializzazione

googling those characters Vedo che è la codifica "Windows-1252".

Il problema si verifica durante l'analisi dell'XML, ho trovato un errore di analisi di "carattere unicode non valido" nella posizione della codifica 1252.

Come posso analizzarlo correttamente? quali soluzioni suggerisci?

risposta

7

Il parser è corretto, qualsiasi cosa abbia prodotto la serializzazione è errata. Come con la maggior parte dei caratteri di controllo C0/C1, non è valido - in realtà, peggio di quello: non ben formato - per inserire un U+001A SUBSTITUTE in un file XML 1.0 (*), anche se codificato come riferimento di carattere come .

Nessun parser XML leggerà questo, né dovrebbe. Sebbene tu possa inserire qualche orribile hackeraggio per cercare di filtrare le sequenze  prima di passarle al parser, questi rozzi hack non funzionerebbero nel caso generale. Il serializzatore deve essere corretto per interrompere la produzione.

In realtà non ho idea di come il carattere (spesso utilizzato per contrassegnare la fine del file in antichi sistemi operativi orribili) si inserisca nell'insieme di dati utilizzato da un'app ASP.NET, ma non sembrerebbe riprodurlo ruolo valido in un nome, indirizzo o e-mail. Forse dovresti davvero cercare di pulire i tuoi dati.

(*: Sarebbe legale se codificato come riferimento di carattere in un documento XML 1.1 Se è assolutamente necessario eseguire il round-trip dei caratteri di controllo tramite XML, sarà necessario utilizzare XML 1.1. Ciò potrebbe causare problemi di compatibilità con parser XML precedenti, e non è ancora possibile utilizzare il carattere U + 0000 NULL, quindi non sarà mai completamente sicuro.)

+0

grazie per la tua risposta dettagliata - presumo che i dati siano stati inserito come copia da un file word o qualcosa del genere. – bushman

+0

Sì, sarebbe comune per i codici di controllo C1 nell'intervallo 0x80-0x9F (in genere provenienti dalle code code 1252 le virgolette errate interpretate come ISO-8859-1), ma il codice di controllo 0x1A non viene utilizzato per nulla da Word o qualsiasi altra app per Windows moderna e comune a cui riesca a pensare. – bobince

+0

so bob, non ho il controllo sui dati come viene da me - è l'unico modo per avere quell'hack orribile e rimuoverlo dalla stringa o c'è un altro modo per rappresentarlo --- per esempio prima della serializzazione - - controlla se la stringa è legale UTF-8. – bushman

Problemi correlati