Domanda

Il nostro SAXParser non ignora il byte order mark which viene visualizzata nella parte iniziale del file.

Come faccio ad avere il mio sax parser di ignorare il byte order mark?

È stato utile?

Soluzione

Sembra che si può essere dando UTF-16 ingresso a un SAXParser che non si aspetta UTF-16. Provare a convertire i dati in UTF-8, potrebbe essere utile.

Altri suggerimenti

Controlla il file in un editor esadecimale.

Se i byte iniziali sono effettivamente \xEF\xBB\xBF seguiti dal documento stesso, allora è un UTF-8 finto-BOM. Anche se UTF-8 faux-BOM sono una scorrettezza fallo e gli strumenti che generano loro hanno bisogno di essere distrutto con l'acido programmazione speciale, le specifiche XML fa richiede parser di riconoscere e ignorare questa sequenza di byte, quindi se il vostro parser SAX non è vero non è conforme e ha bisogno di qualche calci.

Se i byte iniziali che stanno dando  sono in realtà qualcosa di simile a uno dei seguenti:

\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

allora quello che hai è un doppio codifica accidentale. In questo caso, è necessario guardare al programma di produrre il file perché non è ben formato, un parser SAX sarebbe corretto a lamentarsi, e altri caratteri Unicode nel file sarebbe probabilmente troppo incasinato. Forse si sta facendo qualcosa di stupido come serializzazione del documento ad una stringa di byte poi inviarlo attraverso un / ciclo fasullo decodifica encode.

In ogni caso, se avete bisogno di avere il parser saltare la sequenza di byte fastidioso, sarebbe necessario alimentarlo con una versione che ci si hackerato manualmente per rimuovere questo prefisso. Senza sapere cosa si parser SAX è (o anche quale lingua) è difficile dire come fare questo.

Forse si può cercare il flusso di ingresso prima di passarlo al parser? Forse si può leggere il file in una stringa di byte e passare che, spogliato dei byte iniziali, al parser? Se il parser non ti dà queste opzioni si dovrà caricare il file come byte, agganciare l'inizio e salvarlo di nuovo in un nuovo file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top