У меня есть проблема при записи норвежских символов в XML-файл с помощью C#. У меня есть строковая переменная, содержащая некоторый норвежский текст (с буквами как æøå).
Я пишу XML использование XmlTextWriter, пишущий содержание в MemoryStream как это:
MemoryStream stream = new MemoryStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stream, Encoding.GetEncoding("ISO-8859-1"));
xmlTextWriter.Formatting = Formatting.Indented;
xmlTextWriter.WriteStartDocument(); //Start doc
Затем я добавляю свой норвежский текст как это:
xmlTextWriter.WriteCData(myNorwegianText);
Затем я пишу файл в диск как это:
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();
Теперь проблема состоит в том, что в файле на этом, все норвежские символы выглядят забавными.
Я, вероятно, делаю вышеупомянутое некоторым глупым способом. Какие-либо предложения о том, как зафиксировать его?
Почему Вы пишете XML сначала в MemoryStream и затем пишете это в фактический поток файла? Это довольно неэффективно. Если Вы пишете непосредственно в FileStream, он должен работать.
, Если Вы все еще хотите сделать, двойная запись, по любой причине, делает одну из двух вещей. Любой
Удостоверяются, что StreamReader и StreamWriter возражают, что Вы используете весь , используют тот же кодирование тем, которое Вы использовали с XmlWriter (не только StreamWriter, как кто-то еще предложенный), или
не используют StreamReader/StreamWriter. Вместо этого просто скопируйте поток на уровне байта с помощью простого байта [] и Поток. Чтение-запись. Это будет, btw, намного более эффективным так или иначе.
И Ваш StreamWriter и Ваш StreamReader используют UTF-8, потому что Вы не указываете кодирование. Вот почему вещи становятся поврежденными.
, Поскольку tomasr сказал, использование FileStream для запуска с будет более простым - но также и MemoryStream имеет удобный метод "WriteTo", который позволяет Вам скопировать его в FileStream очень легко.
я надеюсь, что у Вас есть оператор использования в Вашем реальном коде, между прочим - Вы не хотите оставлять свой дескриптор файла открытым, если что-то идет не так, как надо, в то время как Вы пишете в него.
Jon
Необходимо установить кодирование каждый раз, Вы пишете строку или считываете двоичные данные как строку.
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, то это не отобразится правильно.
там причина использовать это определенное кодирование, вместо, например, UTF8?