Как уже упоминалось в ответах выше, самая большая проблема здесь - это Encoding
, который по умолчанию не указан.
Если вы не указываете Encoding
для этого вида конверсии, используется значение по умолчанию UTF-8
, которое может соответствовать или не соответствовать вашему сценарию. Вы также без необходимости конвертируете данные, помещая их в MemoryStream
, а затем в FileStream
.
Если ваши исходные данные не UTF-8
, то здесь произойдет следующее: первый переход в MemoryStream
попытается декодировать, используя значение по умолчанию Encoding
из UTF-8
- и в результате повредит ваши данные. Когда вы затем записываете в FileStream
, который также использует UTF-8
в качестве кодировки по умолчанию, вы просто сохраняете это повреждение в файле.
Чтобы решить эту проблему, вам, вероятно, нужно указать Encoding
в ваших Stream
объектах.
Вы также можете полностью пропустить процесс MemoryStream
, который будет быстрее и эффективнее. Ваш обновленный код может выглядеть примерно так:
FileStream fs = new FileStream(myPath, FileMode.Create);
XmlTextWriter xmlTextWriter =
new XmlTextWriter(fs, Encoding.GetEncoding("ISO-8859-1"));
xmlTextWriter.Formatting = Formatting.Indented;
xmlTextWriter.WriteStartDocument(); //Start doc
xmlTextWriter.WriteCData(myNorwegianText);
StreamWriter sw = new StreamWriter(fs);
fs.Position = 0;
StreamReader sr = new StreamReader(fs);
string content = sr.ReadToEnd();
sw.Write(content);
sw.Flush();
fs.Flush();
fs.Close();