Okay, ich versuche, mit UTF8 Textdateien zu arbeiten. Ich kämpfe ständig gegen die BOF-Zeichen, die der Autor für UTF8 eingibt, was so ziemlich alles in die Luft jagt, was ich brauche, um die Datei einschließlich der Serialisierer und anderer Textleser zu lesen.UTF8 Anfang der Datei Zeichen brechen Serializer und Leser
Ich bin ein führendes sechs Bytes von Daten zu erhalten.
0xEF
0xBB
0xBF
0xEF
0xBB
0xBF
(jetzt, dass ich es bin auf der Suche, ich weiß, es gibt es zwei Zeichen ist, dass der UTF8 BOF Marker Ist ich Codierung verdoppeln? es)?
Beachten Sie, dass der Serializer zu UTF8 codiert, dann erhält der Speicher-Stream eine Zeichenfolge als UTF8, dann schreibe ich die Zeichenfolge in die Datei mit UTF8 ... scheint wie eine Menge Redundanz. Gedanken?
//I'm storing this xml result to a database field. (this one includes the BOF chars)
using (MemoryStream ms = new MemoryStream())
{
Utility.SerializeXml(ms, root);
xml = Encoding.UTF8.GetString(ms.ToArray());
}
//later on, I would take that xml and then write it out to a file like this:
File.WriteAllText(path, xml, Encoding.UTF8);
public static void SerializeXml(Stream output, object data)
{
XmlSerializer xs = new XmlSerializer(data.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
settings.Encoding = Encoding.UTF8;
XmlWriter writer = XmlTextWriter.Create(output, settings);
xs.Serialize(writer, data);
writer.Flush();
writer.Close();
}
Perfekt! Das hat meine Frage beantwortet. Ich konnte die Dateien ohne die Stückliste schreiben. Ich ersetzte alle Orte mit 'Encoding.UTF8' durch neue' UTF8Encoding (false) '. – Nathan