Получаю из сети rss-ленту примерно вот таким кодом:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
readStream = new StreamReader(receiveStream, true);
string text = readStream.ReadToEnd();
В случае с
http://lenta.ru/rss/ неверно распознаётся кодировка — как utf-8, хотя на самом деле windows-1251
Верную кодировку можно узнать через XmlDeclaration, но к этому месту уже не известен receiveStream.
Как можно перегнать строку из неверно определённой кодировки в нужную, либо заставить прочесть кодировку верно?
Изыскания в направлении System.Text.Encoding пока ни к чему (ктоме "<title>Lenta.ru: пїЅпїЅпїЅпїЅпїЅпїЅпїЅ</title>") не привели, сама лента может быть любая (и начальная и конечные кодировки, соотвественно тоже), причём не всегда xml-валидная (надо через фильтры прогонять)
Здравствуйте, Krypt, Вы писали:
K>В случае с http://lenta.ru/rss/ неверно распознаётся кодировка — как utf-8, хотя на самом деле windows-1251
Кодировка не распознаётся принципиально. StreamReader этого не умеет и по умолчанию использует utf-8, а автоматическое определение кодировки (булев параметр конструктора) делает только для подсемейства Unicode (см. преамбула).
K>Верную кодировку можно узнать через XmlDeclaration, но к этому месту уже не известен receiveStream.
K>Как можно перегнать строку из неверно определённой кодировки в нужную, либо заставить прочесть кодировку верно?
K>Изыскания в направлении System.Text.Encoding пока ни к чему (ктоме "<title>Lenta.ru: пїЅпїЅпїЅпїЅпїЅпїЅпїЅ</title>") не привели, сама лента может быть любая (и начальная и конечные кодировки, соотвественно тоже), причём не всегда xml-валидная (надо через фильтры прогонять)
Читать надо так:
using(var reader = new StreamReader(receiveStream, Encoding.GetEncoding("windows-1251")))
return reader.ReadToEnd();
Нужную кодировку содержимого можно узнать либо из заголовка Content-Type, либо действительно парсить xml.
С Уважением, Andir!
Здравствуйте, Andir, Вы писали:
A>Здравствуйте, Krypt, Вы писали:
K>>В случае с http://lenta.ru/rss/ неверно распознаётся кодировка — как utf-8, хотя на самом деле windows-1251
A>Кодировка не распознаётся принципиально. StreamReader этого не умеет и по умолчанию использует utf-8, а автоматическое определение кодировки (булев параметр конструктора) делает только для подсемейства Unicode (см. преамбула).
K>>Верную кодировку можно узнать через XmlDeclaration, но к этому месту уже не известен receiveStream.
K>>Как можно перегнать строку из неверно определённой кодировки в нужную, либо заставить прочесть кодировку верно?
K>>Изыскания в направлении System.Text.Encoding пока ни к чему (ктоме "<title>Lenta.ru: пїЅпїЅпїЅпїЅпїЅпїЅпїЅ</title>") не привели, сама лента может быть любая (и начальная и конечные кодировки, соотвественно тоже), причём не всегда xml-валидная (надо через фильтры прогонять)
A>Читать надо так:
A>A>using(var reader = new StreamReader(receiveStream, Encoding.GetEncoding("windows-1251")))
A> return reader.ReadToEnd();
A>
A>Нужную кодировку содержимого можно узнать либо из заголовка Content-Type, либо действительно парсить xml.
A>С Уважением, Andir!
Ага, тогда в любом случае придётся довольно сильно переделывать эту часть библиотеки. Спасибо.