XmlTextWriter.WriteStartDocument() erzeugt invalides XML

Written on August 12, 2007

Ein häufig auftretendes Konstrukt zur Generierung von XML-Dateien (z.B. RSS-Feeds) ist folgendes:

MemoryStream memStream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(memStream, Encoding.UTF8);

Dies führt allerdings u.U. zu folgendem XML-Output via writer.WriteStartDocument():

��<?xml version="1.0" encoding="utf-8"?>

Bei den ersten beiden Zeichen handelt es sich um sog. UTF8-Identifier.

Um dessen Ausgabe via writer.WriteStartDocument() zu unterdrücken, ist folgender Code notwendig:

MemoryStream memStream = new MemoryStream();
Encoding enc = new UTF8Encoding();
XmlTextWriter writer = new XmlTextWriter(memStream, enc);