c# - utf8 - Scrittura di file XML utilizzando XmlTextWriter con codifica ISO-8859-1




à utf 8 html (4)

Dopo aver investigato, questo ha funzionato meglio per me:

var doc = new XDocument(new XDeclaration("1.0", "ISO-8859-1", ""));
        using (XmlWriter writer = doc.CreateWriter()){
            writer.WriteStartDocument();
            writer.WriteStartElement("Root");
            writer.WriteElementString("Foo", "value");
            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
        doc.Save("dte.xml");

Sto avendo problemi a scrivere caratteri norvegesi in un file XML usando C #. Ho una variabile stringa contenente un testo norvegese (con lettere come æøå).

Sto scrivendo l'XML usando un XmlTextWriter, scrivendo il contenuto su un MemoryStream come questo:

MemoryStream stream = new MemoryStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stream, Encoding.GetEncoding("ISO-8859-1"));
xmlTextWriter.Formatting = Formatting.Indented;
xmlTextWriter.WriteStartDocument(); //Start doc

Quindi aggiungo il mio testo in norvegese in questo modo:

xmlTextWriter.WriteCData(myNorwegianText);

Quindi scrivo il file su disco in questo modo:

FileStream myFile = new FileStream(myPath, FileMode.Create);
StreamWriter sw = new StreamWriter(myFile);

stream.Position = 0;
StreamReader sr = new StreamReader(stream);
string content = sr.ReadToEnd();

sw.Write(content);
sw.Flush();

myFile.Flush();
myFile.Close();

Ora il problema è che nel file su questo, tutti i personaggi norvegesi sembrano divertenti.

Probabilmente sto facendo quanto sopra in qualche modo stupido. Qualche suggerimento su come risolverlo?


Sia StreamWriter che StreamReader utilizzano UTF-8, perché non stai specificando la codifica. Ecco perché le cose si stanno corrompendo.

Come ha detto tomasr, usare un FileStream per iniziare sarebbe più semplice, ma anche MemoryStream ha il pratico metodo "WriteTo" che consente di copiarlo facilmente in un FileStream.

Spero che tu abbia una dichiarazione using nel tuo codice reale, a proposito - non vuoi lasciare il tuo handle di file aperto se qualcosa va storto mentre stai scrivendo ad esso.

Jon


Quale codifica usi per visualizzare il file dei risultati? Se non è in ISO-8859-1, non verrà visualizzato correttamente.

C'è un motivo per usare questa codifica specifica, invece di ad esempio UTF8?


È necessario impostare la codifica ogni volta che si scrive una stringa o si leggono dati binari come una stringa.

    Encoding encoding = Encoding.GetEncoding("ISO-8859-1");

    FileStream myFile = new FileStream(myPath, FileMode.Create);
    StreamWriter sw = new StreamWriter(myFile, encoding);

    stream.Position = 0;
    StreamReader sr = new StreamReader(stream, encoding);
    string content = sr.ReadToEnd();

    sw.Write(content);
    sw.Flush();

    myFile.Flush();
    myFile.Close();




iso-8859-1