Мне нужно прочитать первую строку из потока, чтобы определить кодировку файла, а затем заново создать поток с этой кодировкой
Следующий код работает неправильно:
var r = response.GetResponseStream();
var sr = new StreamReader(r);
string firstLine = sr.ReadLine();
string encoding = GetEncodingFromFirstLine(firstLine);
string text = new StreamReader(r, Encoding.GetEncoding(encoding)).ReadToEnd();
Текстовая переменная не содержит весь текст. По какой-то причине первая строка и несколько строк после нее пропущены.
Я попробовал все: закрытие StreamReader, сброс его, вызов отдельного GetResponseStream ... но ничего не получалось.
Я не могу получить поток ответов снова, так как я получаю этот файл из Интернета, и повторная загрузка его будет плохой производительностью.
Обновление
Вот как выглядит GetEncodingFromFirstLine ():
public static string GetEncodingFromFirstLine(string line)
{
int encodingIndex = line.IndexOf("encoding=");
if (encodingIndex == -1)
{
return "utf-8";
}
return line.Substring(encodingIndex + "encoding=".Length).Replace("\"", "").Replace("'", "").Replace("?", "").Replace(">", "");
}
...
// true
Assert.AreEqual("windows-1251", GetEncodingFromFirstLine(@"<?xml version=""1.0"" encoding=""windows-1251""?>"));
** Обновление 2 **
Я работаю с файлами XML, и текстовая переменная анализируется как XML:
var feedItems = XElement.Parse(text);