2009-10-09 3 views

Antwort

5

die Antwort sehen über die TextWriter ‚s-Codierung angeben.

Nebenbei: ISO-8859-1 ist ein Zeichensatz, keine Codierung. Unicode ist auch ein Zeichensatz, aber UTF-16 ist eine Codierung des Zeichensatzes Unicode in eine Sequenz von Bytes. Sie können die Codierung eines Dokuments nicht als ISO-8859-1 angeben, ebenso wie Sie den Zeichensatz eines Dokuments nicht als UTF-16 angeben können. Beachten Sie, dass Unicode der systemeigene Zeichensatz ist und UTF-16 die systemeigene Codierung Unicode für .NET und Java String Klassen und textbasierte oder stringbasierte Operationen ist.

+1

Bedeutet das, dass es keine Möglichkeit gibt, eine ungültige Codierung mit XDocument anzugeben? Ich reiche XML an Dritte weiter, die eine falsche Deklaration benötigen . –

+0

Ich bin sicher, dass Sie können. Welches System entspricht der richtigen Verwendung, Sprache und Spezifikation? – yfeldblum

1

Überprüfen Sie die Codierung der TextWriter, die Sie verwenden. Siehe here.

Wenn die oben genannte Verbindung nicht funktioniert, ist möglicherweise noch Google cache version verfügbar here.

+4

Der Link "hier" funktioniert nicht. Können Sie bitte die Lösung in Ihrer Antwort angeben oder einen anderen Blogbeitrag finden, in dem erklärt wird, wie Sie die 'Encoding'-Eigenschaft eines' TextWriter' modifizieren? –

3

Wie bereits erwähnt, "greift" die .NET XML/Stream-Schreibimplementierung auf oder interpretiert die Codierung von einem anderen Ort als der deklarierten XML-Codierung. Ich habe eine Arbeitslösung erfolgreich getestet, wie in der früheren Stackoverflow post

unter der URL enthalten beschrieben
XDocument xmlDoc = new XDocument(
     new XDeclaration("1.0", "utf-8", "no"), 
     new XElement("foo", "bar")); 

MemoryStream memstream = new MemoryStream(); 
XmlTextWriter xmlwriter = new XmlTextWriter(memstream, new UTF8Encoding()); 

//'Write' (save) XDocument XML to MemoryStream-backed XmlTextWriter instance 
xmlDoc.Save(xmlwriter); 

//Read back XML string from stream 
xmlwriter.Flush();  
memstream.Seek(0, SeekOrigin.Begin); //OR "stream.Position = 0" 
StreamReader streamreader = new StreamReader(memstream); 
string xml = streamreader.ReadToEnd(); 

Console.WriteLine(xml); 
Console.WriteLine(reader.ReadToEnd()); 

Ich hoffe, das jemand hilft.

Prost

1

ich jede Arbeits Antwort irgendwie hier nicht finden können, ist so hier eine tatsächliche Lösung die gewünschte Codierung in der Kopfzeile, die folgende Ausgabe:

private void CreateXml() 
    {  
     XmlTextWriter xmlwriter = new XmlTextWriter("c:\\test.xml", Encoding.GetEncoding("iso-8859-1"));   

     XDocument xdoc = new XDocument(
      new XElement("Test") 
     ); 

     xdoc.Save(xmlwriter); 
     xmlwriter.Close(); 
    } 

Der Grund, warum Sie UTF bekommen -16 bedeutet, dass Zeichenfolgen mit UTF-16 im Speicher codiert sind. Solange Sie keine Codierung für die XML-Ausgabe angeben, wird die Codierung im XML-Header überschrieben, damit sie der tatsächlich verwendeten Codierung entspricht. Verwenden Sie eine XmlTextWriter ist eine Methode zum Angeben einer anderen Codierung.

Sie können auch die XmlTextWriter schreiben, um eine MemoryStream und dann wieder in string umwandeln, wenn Sie die gesamte Operation im Speicher durchführen müssen.

Verwandte Themen