Запись использования XML-файлов XmlTextWriter с кодированием ISO-8859-1

У меня есть проблема при записи норвежских символов в 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();

Теперь проблема состоит в том, что в файле на этом, все норвежские символы выглядят забавными.

Я, вероятно, делаю вышеупомянутое некоторым глупым способом. Какие-либо предложения о том, как зафиксировать его?

17
задан Default 21 November 2012 в 09:47
поделиться

4 ответа

Почему Вы пишете XML сначала в MemoryStream и затем пишете это в фактический поток файла? Это довольно неэффективно. Если Вы пишете непосредственно в FileStream, он должен работать.

, Если Вы все еще хотите сделать, двойная запись, по любой причине, делает одну из двух вещей. Любой

  1. Удостоверяются, что StreamReader и StreamWriter возражают, что Вы используете весь , используют тот же кодирование тем, которое Вы использовали с XmlWriter (не только StreamWriter, как кто-то еще предложенный), или

  2. не используют StreamReader/StreamWriter. Вместо этого просто скопируйте поток на уровне байта с помощью простого байта [] и Поток. Чтение-запись. Это будет, btw, намного более эффективным так или иначе.

13
ответ дан 30 November 2019 в 11:18
поделиться

И Ваш StreamWriter и Ваш StreamReader используют UTF-8, потому что Вы не указываете кодирование. Вот почему вещи становятся поврежденными.

, Поскольку tomasr сказал, использование FileStream для запуска с будет более простым - но также и MemoryStream имеет удобный метод "WriteTo", который позволяет Вам скопировать его в FileStream очень легко.

я надеюсь, что у Вас есть оператор использования в Вашем реальном коде, между прочим - Вы не хотите оставлять свой дескриптор файла открытым, если что-то идет не так, как надо, в то время как Вы пишете в него.

Jon

13
ответ дан 30 November 2019 в 11:18
поделиться

Необходимо установить кодирование каждый раз, Вы пишете строку или считываете двоичные данные как строку.

    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();
8
ответ дан 30 November 2019 в 11:18
поделиться

Какое кодирование Вы используете для отображения файла результата? Если это не будет в ISO-8859-1, то это не отобразится правильно.

там причина использовать это определенное кодирование, вместо, например, UTF8?

3
ответ дан 30 November 2019 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: