Domanda

Esiste un modo per produrre il contenuto di un documento X senza la distinta base? Quando legge l'output con Flash, causa errori.

È stato utile?

Soluzione

Se stai scrivendo l'XML con un XmlWriter, puoi impostare la codifica su una che è stata inizializzata per escludere la DBA.

EG: il costruttore di System.Text.UTF8Encoding accetta un valore booleano per specificare se si desidera la distinta base, quindi:

XmlWriter writer = XmlWriter.Create("foo.xml");
writer.Settings.Encoding = new System.Text.UTF8Encoding(false);
myXDocument.WriteTo(writer);

Crea un XmlWriter con codifica UTF-8 e senza il Byte Order Mark.

Altri suggerimenti

Leggera mod alla risposta di Chris Wenham.

Non è possibile modificare la codifica una volta creato XmlWriter, ma è possibile impostarlo utilizzando XmlWriterSettings durante la creazione di XmlWriter

XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new System.Text.UTF8Encoding(false); 

XmlWriter writer = XmlWriter.Create("foo.xml", settings); 
myXDocument.WriteTo(writer); 

Non ho potuto aggiungere un commento sopra, ma se qualcuno usa il suggerimento di Chris Wenham, ricordati di eliminare lo scrittore! Ho trascorso un po 'di tempo a chiedermi perché il mio output fosse stato troncato, e questa era la ragione.

Suggerisci un utilizzando (XmlWriter ...) {...} passa al suggerimento di Chris

Una specie di combinazione di post, forse qualcosa del genere:


MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
xmlDocument.Save(writer);

Come detto, questo problema ha un cattivo odore.

Secondo questa nota di supporto , Flash utilizza il BOM per chiarire la differenza tra UTF-16BE e UTF-16LE, che è come dovrebbe essere. Quindi non dovresti ricevere un errore da Flash: XDocument produce XML ben formato codificato UTF16 e Macromedia afferma che Flash può leggere XML ben formato codificato UTF16.

Questo mi fa sospettare che qualunque sia il problema che stai riscontrando, probabilmente non è causato dalla DBA. Se fossi in me, scaverei di più, con l'aspettativa che il problema reale sia altrove.

Probabilmente potresti usare System.Text.Encoding.Convert () sull'output; Proprio come qualcosa da provare, non qualcosa che ho testato.

Convertilo in una stringa, quindi rimuovi il segno da solo.

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