2008-10-01 20 views

Respuesta

9

Si está escribiendo el XML con un XmlWriter, puede configurar la codificación en una que se haya inicializado para omitir la lista de materiales.

EG: el constructor de System.Text.UTF8Encoding toma un valor lógico para especificar si desea que la lista de materiales, por lo que:

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

crearía un XmlWriter con codificación UTF-8 y sin el orden de bytes Marcos.

+0

writer.Settings.Encoding is read only –

+0

¿Estás seguro? No obtengo un error de compilación, y la documentación dice que no es de solo lectura: http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.encoding.aspx –

+0

cómo obtengo de aquí a una cadena? –

0

Probablemente podría usar System.Text.Encoding.Convert() en la salida; Solo como algo para probar, no como algo que haya probado.

0

Conviértalo en una cadena, luego quite la marca usted mismo.

2

Tipo de una combinación de publicaciones, tal vez algo como esto:


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

Como se ha indicado, este problema tiene un mal olor.

De acuerdo con this support note, Flash usa la lista de materiales para desambiguar entre UTF-16BE y UTF-16LE, que es como debería ser. Por lo tanto, no debería recibir un error de Flash: XDocument produce XML bien formado con codificación UTF16, y Macromedia afirma que Flash puede leer XML bien formado con codificación UTF16.

Esto me hace sospechar que sea cual sea el problema que encuentre, probablemente no esté causado por la lista de materiales. Si fuera yo, buscaría más, con la expectativa de que el problema real sea otro.

3

No pude agregar un comentario arriba, pero si alguien usa la sugerencia de Chris Wenham, ¡recuerde deshacerse del escritor! Pasé un tiempo preguntándome por qué mi producción se truncó, y esa fue la razón.

sugieren un cambio using(XmlWriter...) {...} a la sugerencia de Chris

5

mod Leve a la respuesta de Chris Wenham.

No se puede modificar la codificación de una vez creada la XmlWriter, pero se puede establecer utilizando los XmlWriterSettings al crear el XmlWriter

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

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